Android Studioマルチチャネルパッケージとパッケージ化時にパッケージ名を設定

4378 ワード

Android Studioを使用してマルチチャネルパッケージを行うのは超簡単で、くだらないことは言わないで、2つのステップ:
2つのパッケージ:
方法1:
1、リストファイルAndroidManifest.xmlに次のバンドを追加
AndroidManifestでxmlファイルにアプリケーションを追加するには:
        

これは、友盟統計を使用する場合のコードの例であり、meta-dataのnameは、実際のニーズに応じて自分で修正することができます.
2、build.gradleによる構成
在 build.gradleファイルにandroidの下に追加:
android {

    ........
    
    
    productFlavors {

        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }

        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }

        c360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
        }
    }
}


この2つのステップの構成を行えば、マルチチャネルパッケージが実現され、非常に簡単です.上は3つしか配置されていませんが、より多くのシミュレーションを構成したい場合は、対応するチャネルを追加すればいいです.
方式2:
1、リストファイルAndroidManifest.xmlに次のバンドを追加
AndroidManifestでxmlファイルにアプリケーションを追加するには:
        

これは、友盟統計を使用する場合のコードの例であり、meta-dataのnameは、実際のニーズに応じて自分で修正することができます.
2、build.gradleによる構成
在 build.gradleファイルにandroidの下に追加:
android {

    ........
    
    
    productFlavors {

        wandoujia {}

        baidu {}

        c360 {}
    }
    
        productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [NAME_VALUE : name]
    }
}


このように構成することで、マルチチャネルパッケージングも実現できます.
パッケージ名の設定
在 build.gradleファイルのandroidのbuildTypeのreleaseの下に追加:
applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        //   apk   boohee_v1.0_2015-01-15_wandoujia.apk
                        def fileName = "myApk_${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }

コードが多くなくて、簡単で、説明しないで、そのまま使えばOKです.
完全なコード:
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"
    defaultConfig {
        applicationId "com.cfox.gradlemodel"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        //   apk   boohee_v1.0_2015-01-15_wandoujia.apk
                        def fileName = "myApk_${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }
    }

    productFlavors {
        wandoujia {}
        baidu {}
        xiaomi {}
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [NAME_VALUE : name]
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}

最後に
梱包の際に該当するルートを選べばいいです.
プロファイルについて簡単に説明します.meta-dataandroid:value="${UMENG_CHANNEL_VALUE}"のうち${UMENG_CHANNEL_VALUE}はワイルドカードでbuild.gradleファイルのmanifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]のUMENG_CHANNEL_VALUE対応.
もし以上の内容が間違っていたら、すぐに指摘して、一緒に勉強して、一緒に進歩してください.