Android——APP多渠道打包

1.添加友盟统计依赖库
compile 'com.umeng.analytics:analytics:latest.integration'
allprojects {     
repositories {             
mavenCentral()         
}
}
2.Manifest中配置权限和Key
< uses-permission android :name= "android.permission.INTERNET" />
< uses-sdk android :minSdkVersion= "8" ></ uses-sdk >
< 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" />

< meta-data android :value= "5a446bf3f29d987e88000061" android :name= "UMENG_APPKEY" />
< meta-data android :value= "${UMENG_CHANNEL_VALUE}" android :name= "UMENG_CHANNEL" />
3.app build.gradle动态配置Manifest的占位符和默认值
defaultConfig {
flavorDimensions "versionCode"
 ...         multiDexEnabled true // 突破方法数65535限制
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"umeng"]    
 }
4.配置签名文件信息,注意:signingConfigs要在buildTypes之前
signingConfigs {
debug {}
release {
keyAlias 'key0'
keyPassword '123456'
storeFile file ( 'release.jks' )
storePassword '123456'
}
buildTypes {        
 release {             
minifyEnabled false             proguardFiles getDefaultProguardFile('proguard‑android.txt'), 'proguard‑rules.pro'             
signingConfig signingConfigs.release        
 }    
}
5.添加渠道信息
productFlavors {         
xiaomi{             manifestPlaceholders = [UMENG_CHANNEL_VAULE: "xiaomi"]         
}
     wandoujia{             manifestPlaceholders = [UMENG_CHANNEL_VAULE: "wandoujia"]      }     
}
为了简单可以用脚本去替换重复代码
productFlavors.all {         flavor ‑> flavor.manifestPlaceholders = [UMENG_CHANNEL_VAULE: name]     
}
7.在Android studio的Terminal中使用命令gradlew assembleRelease进行打包(mac或Linux下使用./gradlew assembleRelease),会在app的build下生成对应渠道的apk包

8.可以配置多渠道打包输出的名字,比如打包的名字就是渠道名字
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile ( 'proguard-android.txt' ), 'proguard-rules.pro'
signingConfig signingConfigs. release
// 指定我们 release 包输出文件名就是我们渠道的名字
applicationVariants. all { variant ->
variant .outputs. each { output ->
def outputFile = outputFileName
if (outputFile != null && outputFile.name.endsWith( ".apk" )) {
def fileName = " ${ variant .productFlavors[ 0 ].name} " + ".apk"
outputFileName = new File (outputFile.parent, fileName);
}
}
}
}
}
Android3.0
  • 使用 all() 替换 each()
  • 使用 outputFileName 替换 output.outputFile
9.其他技巧:
①可以给不同渠道的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 {
//        xiaomi{ ////            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] //            resValue "string", "app_name", "xiaomi"
//        }
// //     wandoujia{ ////            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] //            resValue "string", "app_name", "wandoujia"
//        }         
okhttp {             
applicationIdSuffix "okhttp"             resValue "string", "app_name", "okhttp"         
}
         jpush {             
applicationIdSuffix "jpush"             resValue "string", "app_name", "jpush"         
}     
}

猜你喜欢

转载自blog.csdn.net/xy8199/article/details/78927998