android多渠道打包(慕课笔记)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wode_dream/article/details/53783335

     文章通过两种方式标记渠道:

1、修改strings.xml中的字段;

2、修改AndroidManifest.xml中<meta-data>的值;


   三个步骤:

1、在strings.xml中的<string name="channel_flag">influx</string>(用gradle打包时要注释掉这句)和

AndroidManifest.xml中的<meta-data android:value="${FLAG_VARIOUS_CHANNEL}" android:name="FLAG_CHANNEL"/>

2、在app module的build.gradle中添加脚本修改channel_flag跟FLAG_CHANNEL。


build.gradle中的代码

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.xxxxxxx.xxxxx"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        manifestPlaceholders=[FLAG_VARIOUS_CHANNEL:"influx"]
    }
    signingConfigs{
        myConfig{
            storeFile file("./xxxx.jks")
            storePassword "xxxx"
            keyAlias "influx"
            keyPassword "influx"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.myConfig

            /**
             * 把app-xiaomi-release.apk改成xiaomi.apk
             */
            applicationVariants.all{
                variant->variant.outputs.each{ output->
                    def outFile=output.outputFile
                    if(outFile!=null && outFile.name.endsWith(".apk")){
                        def fileName="${variant.productFlavors[0].name}"+".apk"
                        output.outputFile=new File(outFile.parent,fileName)
                    }
                }
            }
        }
    }

    productFlavors{
        xiaomi{
            //一般写法
//            manifestPlaceholders=[FLAG_VARIOUS_CHANNEL:"xiaomi"]

            //更改strings.xml中的channel_flag为"xiaomi"
            resValue("string","channel_flag","xiaomi")    //这里是关键
        }
        baidu{
//            manifestPlaceholders=[FLAG_VARIOUS_CHANNEL:"baidu"]
            resValue("string","channel_flag","baidu")
        }
        yingyongbao{
//            manifestPlaceholders=[FLAG_VARIOUS_CHANNEL:"yingyongbao"]
        }

        //根据功能点打包,[生成的apk,包名后会追加"okhttp",但是代码中或得到的包名不变]
        okhttp{
            applicationIdSuffix "okhttp"
            resValue("string","app_name","okhttp")
        }
    }
    productFlavors.all{
        flavor->flavor.manifestPlaceholders=[FLAG_VARIOUS_CHANNEL: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:23.4.0'
    compile 'com.android.support:recyclerview-v7:23.4.0'
    testCompile 'junit:junit:4.12'
}


3、通过命令行打包:

./gradlew  assembleRelease

./gradlew assembleDebug




猜你喜欢

转载自blog.csdn.net/wode_dream/article/details/53783335