1.添加友盟统计依赖库
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
allprojects {
repositories {
mavenCentral()
}
}
2.Manifest中配置权限和Key
<manifest……>
<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.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application ……>
……
<activity ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
</application>
</manifest>
3.app build.gradle动态配置Manifest的占位符和默认值
defaultConfig {
...
multiDexEnabled true // 突破方法数65535限制
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"umeng"]
}
4.配置签名文件信息,注意:signingConfigs要在buildTypes之前
// 配置签名文件
signingConfigs {
debug {}
release {
keyAlias 'key0'
keyPassword '123456'
storeFile file('commom.jks')
storePassword '123456'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
5.添加渠道信息
productFlavors {
xiaomi{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
wandoujia{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
为了简单可以用脚本去替换重复代码
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: 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 = output.outputFile
if (outputFile != null && outputFile.name.endsWith(".apk")) {
def fileName = "${variant.productFlavors[0].name}"+".apk"
output.outputFile = new File(outputFile.parent, fileName);
}
}
}
}
}
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"
}
}
// Android Studio3.0以后的写法
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.productFlavors[0].name}.apk"
}
}
flavorDimensions "color"
android { ...
defaultConfig { ...
manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"default_channel" ] }
productFlavors {
default_channel{}
wandoujia{}
_360{}
yingyongbao{}
xiaomi{}
baidu{}
huawei{}
jifeng{}
}
productFlavors.all { flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] }}