前言:已经有一段时间没有做过app开发, 今天重拾了Android Studio多渠道打包的流程.Android 多渠道打包一般是用来配合运营进行数据统计的, 大部分运营会选择友盟统计来统计app在不同应用商店下载量和激活等情况,今天就重新梳理一下多渠道打包流程.
注: 本文只是本人学习, 还未投入生产使用.
-
友盟注册应用
第一步先去友盟注册我们的应用http://mobile.umeng.com, 这个步骤就不细讲, 按流程来就好, 注册应用主要是为了分配一个应用的AppKey, 友盟就是通过这个Key来进行应用的统计的.
导入友盟sdk
一般我习惯使用Gradle依赖来添加, 在mudule的build文件加入
dependencies {
compile'com.umeng.analytics:analytics:latest.integration'}
无法集成时,在project的build文件中加入
allprojects {
repositories {
mavenCentral()
}
}
3.添加权限
在manifest中加入权限
<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="Channel ID" android:name="UMENG_CHANNEL"/>
</application>
</manifest>
注意: 最后要把AppKey换成你申请的Key
Channel Id 先用一个${UMENG_CHANNEL_VALUE}占位, 后面在gradle动态替换
4.初始化
在Application中初始化友盟
MobclickAgent.setDebugMode(true);
MobclickAgent.openActivityDurationTrack(false);
- mudule 的 gralde.build文件
android {
compileSdkVersion 25
buildToolsVersion '26.0.0'
defaultConfig {
applicationId "com.halove.business"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// 1.第一步
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "imooc"]
}
signingConfigs {
debug {
}
// 2.把.jks签名文件拷到同级目录下
release {
storeFile file("business.jks")
storePassword "xie7561331"
keyAlias "test"
keyPassword "test123456"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//生成签名包
signingConfig signingConfigs.release
//3.指定我们release包的输出文件名就是我们的渠道名字,去掉打出来的包的前缀"app"
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);
}
}
}
}
}
//4. 添加渠道
productFlavors {
imooc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "imooc"]
}
googleplayer {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "googleplayer"]
}
//有各种新的渠道安装这种写法就可以添加了
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE : name]
}
}
//使AS知道.so文件的位置
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
- 生成签名包
在Terminal中输入命令
./gradlew assembRelease // 打出所有release 包
./gradlew assembDebug // 打出Debug包
./gradlew assembBaiduRelease // 只打baidu的release包