1. 程式人生 > >(安卓) 多渠道打包

(安卓) 多渠道打包

1.新增友盟統計依賴庫

dependencies {
    compile 'com.umeng.sdk:common:latest.integration'
    compile 'com.umeng.sdk:analytics:latest.integration'
}
如果無法正常整合請新增如下配置:
allprojects {
    repositories {
            mavenCentral()     
    }
}

2.Manifest中配置許可權和Key:

        也就是清單檔案中

  <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application......>
          //這裡的value="5a446bf5f29d987bd200008a"是在友盟裡面自己賬號生成的,看圖
        <meta-data android:value="5a446bf5f29d987bd200008a" android:name="UMENG_APPKEY"/>
        <meta-data android:value="${UMENG_CHANNEL_VAULE}" android:name="UMENG_CHANNEL"/>

    </application>
   



3.app build.gradle動態配置Manifest的佔位符和預設值

     也就是在專案的build.gradle(Module:app)中配置:

 defaultConfig {
    
        multiDexEnabled true // 突破方法數65535限制
        manifestPlaceholders = [UMENG_CHANNEL_VAULE: "umeng"]
  

    }

4.配置簽名檔案資訊,注意:signingConfigs要在buildTypes之前

 signingConfigs {
        release {
            keyAlias 'key0'
            keyPassword '123456'
            storeFile file('release.jks')
            storePassword '123456'
        }
    }

5.新增渠道資訊
productFlavors {
        yingyongbao{

            }
        xiaomi{

        }
    }

為了簡單可以用指令碼去替換重複程式碼

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


最後點選 Build下的  Generate Signed APK  進行打包  在Flavors選中需要打包的   點選Finish就可以了。看圖:

 

6.可以配置多渠道打包輸出的名字,比如打包的名字就是渠道名字

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            applicationVariants.all { variant ->
                variant.outputs.each{ output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith(".apk")) {
                        def fileName = "${variant.productFlavors[0].name}"+".apk"
                        output.outputFile = new File(outputFile.parent, fileName);
                    }
                }
            }
        }
    }

7.其他技巧:

①可以給不同渠道的apk賦不同的應用名

productFlavors {         xiaomi{
        //            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        resValue "string", "app_name", "xiaomi"
    }
        wandoujia{
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
            resValue "string", "app_name", "wandoujia"
        }

②給測試打不同功能點可以安裝在同一個手機上的測試包

  productFlavors {

        okhttp {
            applicationIdSuffix "okhttp"
            resValue "string", "app_name", "okhttp"
        }
        jpush {
            applicationIdSuffix "jpush"
            resValue "string", "app_name", "jpush"
        }
    }




多渠道打包就是因為目前市場上   app應用商店太多,所以對於這一情況就有了多渠道打包,可以讓使用者在不用的應用商店下載app