build.gradleだけで複数apkを作る試行メモ
はじめに
あんまり需要がない話だと思うけど、調べるのにちょっと時間がかかったので
二度目に困らないようにメモっておく
動作環境
試行状況
やりたい事
- パッケージ名をかえる
- タイトルを変える
- アイコンを変える
buildTypeを動的に複数作る
- app/AndroidManifest.xml
<application tools:replace="android:label" android:label="${base_app_name}" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/AppTheme">
- app/build.gradle
defaultConfig { //★ ココのデフォルト時の設定しないと通常のbuildType時にエラーになる manifestPlaceholders = [base_app_name: "@string/app_name"] } buildTypes { ("A".."J").each{num-> ant.echo "debug${num}" "debug${num}"{ initWith(buildTypes.debug) //TODO: applicationIdSuffix application pluginにしか存在しない(features pluginには無し) applicationIdSuffix ".debug.${num.toLowerCase()}" //パッケージ名は小文字にする manifestPlaceholders = [base_app_name: "HogeTest$num"] } } } }
アイコンを動的に変更する
ribbonizer plugin を利用
- app/build.gradle
apply plugin: 'com.android.application' apply plugin: 'com.github.gfx.ribbonizer' //need application plugin // TODO: src/main/res がないとこのDSL自体動かない ribbonizer { //iconNames "@drawable/ic_notification", "@drawable/widget_preview" iconNames "@mipmap/ic_launcher" builder { variant, iconFile -> ant.echo "variant="+variant.buildType.name // if (variant.flavorName == "local") { // return grayRibbonFilter(variant, iconFile) // } // if (variant.buildType.name == "debugB") { // return yellowRibbonFilter(variant, iconFile) // } // else { // return greenRibbonFilter(variant, iconFile) // } // // or customColorRibbonFilter(variant, iconFile, "#0000FF") // // //Although `canary` build-type is marked as `non-debuggable` // //we can still force specific variants to be ribbonized: // forcedVariantsNames "localCanary" if (variant.buildType.name.indexOf("debug")!=-1) { String endStr = variant.buildType.name.substring( variant.buildType.name.length() -1); if(endStr.equals("g")){ return greenRibbonFilter(variant, iconFile) } byte end = endStr.getBytes()[0] //ant.echo end int num = end - (byte)'A' Long colorCode = 0x0000FF + num * 16 << 2 String hexString = "0x" + Long.toHexString(colorCode) ant.echo hexString return customColorRibbonFilter(variant, iconFile, hexString) } } }
AS3.0で利用した場合の注意点
feature plugin だと ribbonizer pluginが対応していない
一応G様的には、library project扱いらしいんだけどな・・
- features/build.gradle
//apply plugin: 'com.android.application' apply plugin: 'com.android.feature' android { baseFeature true // TODO:3.0 depricated //publishNonDefault true defaultPublishConfig "debug" buildTypes { //TODO:標準でないbuiidType等は手動で追加する必要があり ("A".."J").each { num -> //ant.echo "debug${num}" "debug${num}" { initWith(buildTypes.debug) //manifestPlaceholders = [base_app_name: "HogeTest$num"] } } }
buildTypes を手動でapp側と同じものを追加しないと駄目な所がネックかも