您现在的位置是:首页 > 文章详情

Android 多渠道打包(同一个工程不同包名,不同服务器地址等)

日期:2018-06-13点击:435

一、参考

1、多渠道打包——同一台设备上同时安装你的正式与测试环境APP
2、Android多渠道打包没你想的那么复杂
3、多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源

二、应用场景

1、一个APP针对多个应用市场,需要在不同应用市场看日活啊等等的
2、同一个工程代码,但是需要用到不同的省市区、挂在不同的服务器下面,等于多个有一样功能但又互相独立的APP,可以多个同时安装在手机上面
3、其他

三、效果图

img_1f29da60e17d40104e74c391a8e7a08d.png
icon2.png
img_22418701b2cec8e2e9e91a6d1fdd6d87.png
myapp.png
img_f457258082f9aa0d1cb0f039c4263bed.png
yourapp.png

四、实例:以应用场景2作为案例

1、app/build.gradle 文件的修改,增加:productFlavors

1.1、defaultConfig注释掉原本的applicationId,不然会和多渠道内的包名有冲突
1.2、versionCode和versionName也可以配置进productFlavors中去,不多说
1.3、buildTypes暂时就用默认的
1.4、productFlavors下一般有这几部分组成

定义 内容
applicationId 某个取到的应用包名
resValue 针对资源文件,包含string.xml等,注意两点,(1)keyname一定要有且一致 (2)原本main目录下的keyname注释掉,分别增加多渠道通道的资源文件库,后面会截图显示
buildConfigField 自动建立BuildConfig文件中的动态常量,注意String值的话是‘ “ xxx ” ’这样的格式
manifestPlaceholders 清单文件里可动态替换的内容,这里一般由打包的apk名字,还有fileprovider等等,还有各种第三方key,比如友盟,极光推送等等

1.5、学习几个英语单词,加深理解

英文 中文
Variants 变体 - 所以应该叫‘多变体打包’--好难听
Flavors 特点 - 变体的特点/渠道的特点--就是需要替换的动态常量
Channel 渠道 - 这个才是渠道吗~~AS里完全没有,但是好听呀
apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { //因为多渠道已经有包名了,此处注释掉 //applicationId "com.flavor.test.flavortestapp" minSdkVersion 14 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } //默认的,会有release和隐藏的debug buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** * 多渠道打包 * 1、applicationId = 软件-包名 * 2、app_name = 资源文件string.xml下的,需要建立不同的res目录 * 3、BASE_SERVER_URL = 基础服务器地址,在自动创建BuildConfig下 * 4、APP_File_Provider = 文件provider,一般是包名+fileprovider命名 * 5、其他所需要配置的百度Key,极光推送key,友盟key等等... * */ productFlavors { //我的APP my_app{ applicationId "com.flavor.myapp" resValue "string", "app_name", "APP-我的" buildConfigField "String" , "APP_File_Provider" , '"com.flavor.myapp.fileprovider"' buildConfigField "String" , "BASE_SERVER_URL" , '"http://my/app/"' //manifest里面的值 manifestPlaceholders = [ MTA_CHANNEL_VALUE : "my_app", FILE_PROVIDER : "com.flavor.myapp.fileprovider" ] } //你的APP your_app{ applicationId "com.flavor.yourapp" resValue "string", "app_name", "APP-你的" buildConfigField "String" , "APP_File_Provider" , '"com.flavor.yourapp.fileprovider"' buildConfigField "String" , "BASE_SERVER_URL" , '"http://your/app/"' //manifest里面的值 manifestPlaceholders = [ MTA_CHANNEL_VALUE : "your_app", FILE_PROVIDER : "com.flavor.yourapp.fileprovider" ] } } /** * 打包导出apk时候的名字,或者各种服务的key配置等等 * */ applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile //如果打包release版本,则包名为 xx取到.apk if (variant.buildType.name.equals('release')) { def fileName = "Channel${defaultConfig.versionName}_${variant.productFlavors[0].name}"+releaseTime()+".apk" output.outputFile = new File(outputFile.parent, fileName) } } } } //打包时间 def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' } 

2、需要修改的工程目录和调试

这里my_app和your_app目录下的mipmap和values分别就改了唯一需要动态改变的图片和值,比如string.xml下的app_name,原本main下values中string.xml的app_name注释掉


img_074238c777a50d61a086c61fa7153623.png
aa.png
<resources> <string name="app_name">APP-你的</string> </resources> 

3、清单文件

img_5376ea1ad243b78bcc2bae1f990a87fd.png
manifest.png
原文链接:https://yq.aliyun.com/articles/663172
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章