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"
}
}