您的位置:首页 > 移动开发 > Android开发

android多渠道打包&&几个打包小技巧

2017-01-01 17:25 309 查看

android多渠道打包

多渠道的意义

更详细的统计app被下载的途径

查看app在每个渠道的表现

有利于app的推广

使用友盟实现多渠道打包

多渠道打包的原理

为每个渠道的apk指定一个唯一的标识符

android中通常在Manifest.xml中为其指定

也可以在代码中指定,但一般不用

使用友盟步骤

上友盟官网注册并创建新应用,获得Appkey

下载SDK并集成,推荐使用studio集成

Manifest.xml中配置渠道号和Appkey

在moudle的build.gradle中编写多渠道脚本

1.集成友盟SDK

在build.gradle中添加依赖:

dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}


2.Manifest.xml中配置渠道号和Appkey,以及相关权限

<manifest……>
<uses-sdk android:minSdkVersion="4"></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 ……/>
<!--友盟AppKey-->
<meta-data
android:name="UMENG_APPKEY"
android:value="YOUR_APP_KEY" />
<!--渠道号-->
<!--此处使用占位符,然后在build.gradle中动态的替换它-->
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
</application>
</manifest>


3.在moudle的build.gradle中编写多渠道脚本

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
applicationId "com.shaw.testapp"
minSdkVersion 9
targetSdkVersion 23
versionCode 100
versionName "1.0.0"
multiDexEnabled true//突破应用方法数65535的限制
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"umeng"]//设置默认的渠道名
}

//添加我们的签名文件配置
signingConfigs{
//为我们的release包添加签名文件配置
myConfigs {
storeFile file("key.jks")//
storePassword "shaw666"
keyAlias "shaw"
keyPassword "shaw666"
}
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//添加我们的签名文件配置
signingConfig signingConfigs.myConfigs
}
}

//多渠道的支持
productFlavors{
xiaomi{}
wandoujia{}
}

//遍历渠道,将每个渠道的name替换到UMENG_CHANNEL_VALUE中
productFlavors.all{
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'

//添加友盟统计库依赖
compile 'com.umeng.analytics:analytics:latest.integration'
}


4.使用命令行打包

在Terminal中使用命令gradlew assembleRelease自动打出所有的渠道包

gradlew assembleDebug //所有平台的debug包

gradlew assemblewandoujiaRelease //只打wandoujia的Release包

关于打包的其他技巧

1.修改release包的输出文件名

buildTypes {
release {
……
applicationVariants.all{ variant ->
variant.outputs.each{ output ->
def outFile = output.outputFile
if (outFile != null && outFile.name.endsWith(".apk")){
def fileName = defaultConfig.applicationId + '_v'
+ defaultConfig.versionName + '_'
+ variant.productFlavors[0].name + '.apk'
output.outputFile = new File(outFile.parent, fileName);
}
}
}
}
}


效果如下:



2.在每个渠道中的资源的变动

//多渠道的支持
productFlavors{
xiaomi{
resValue "string", "app_name", "xiaomi_app"
}
wandoujia{
resValue "string", "app_name", "wandoujia_app"
}
}


先定义,再在代码使用,最后在打包时,将之前定义的value替换掉。(需要将之前定义的value删除,否则会报错)

3.在同一设备上同时安装多个不同功能点的app

//多渠道的支持
productFlavors{
okhttp{
//给defaultConfig.applicationId添加后缀(不会影响程序中获取的包名)
applicationIdSuffix"okhttp"
resValue "string", "app_name", "okhttp_app"
}
jpush{
applicationIdSuffix"jpush"
resValue "string", "app_name", "jpush_app"
}
}


效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: