Android 多渠道打包(同一个工程不同包名,不同服务器地址等)
一、参考
1、多渠道打包——同一台设备上同时安装你的正式与测试环境APP
2、Android多渠道打包没你想的那么复杂
3、多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源
二、应用场景
1、一个APP针对多个应用市场,需要在不同应用市场看日活啊等等的
2、同一个工程代码,但是需要用到不同的省市区、挂在不同的服务器下面,等于多个有一样功能但又互相独立的APP,可以多个同时安装在手机上面
3、其他
三、效果图
四、实例:以应用场景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注释掉
<resources> <string name="app_name">APP-你的</string> </resources>
3、清单文件

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【iOS】浅拷贝和深拷贝
浅拷贝和深拷贝 浅拷贝即指针拷贝,可以认为是给一只狗加了一条绳子;深拷贝不但拷贝了对象的指针,还在系统中在分配了一块内存用来存放拷贝对象的内容,可以认为是产生了一条带绳子的新狗。即浅拷贝是两根绳子一条狗,深拷贝是两根绳子两条狗且每只狗对应各自的绳子。 图示: 深浅拷贝取决于拷贝后的对象是不是和被拷贝对象的地址相同,如果不同,则产生了新的对象,即为深拷贝。如果不同,则只是指针拷贝,相当于retain一次原对象,即为浅拷贝。 copy与mutableCopy copy复制后的对象是不可变对象,mutableCopy复制后的对象是可变对象,与原始对象是否可变无关。 非集合类的copy与mutableCopy 对不可变对象执行copy操作,是指针复制(浅拷贝),执行mutableCopy操作是内容复制(深拷贝)。 对可变对象执行copy操作和mutableCopy操作都是内容复制(深拷贝)。 代码表示如下: [immutableObject copy]; // 浅复制 [immutableObject mutableCopy]; // 深复制 [mutableObject copy]; // ...
- 下一篇
weex 一个传说级巨坑-- 2018最新版weex踩坑指南(weex navigator 多界面跳转)
先说结论,本人极度非常 不推荐weex作为任何商用开发 有很多人会说了... 你瞎扯.. 你看别人阿里.. 啊飞猪... 啊那个支付宝... 人家不是用得好好的么... 当然这也是我们公司作为技术选型的考量.. 三端通用.. 阿里系的app全线在用.. 理论上是可以实现的.. 而且我们在编码过程中.. 可以把IOS工程师,安卓工程师和前端工程师以及部分熟悉一点前端的后端工程师都拉过来贡献一套代码.. 代码质量可以得到保障 现在想想只能说... 太天真了... 你也不想想人家阿里有多少大牛有多少人在做这个项目.. 再说淘宝都卡成啥样了大家还是愿意用.. 如果你的项目这样卡两下你的app是否还能像淘宝那样拉住顾客?? 这就像你说你想写一篇巨著... 你打算用英文写... 翻译成中文 俄文 日文(ios android web)... 让人看了还能把别人国家的感动得稀里哗啦的.. 本身难度就会不小.. 另外你在android中打开布局边界看一下天猫飞猪... 里面weex的界面已经只剩下很少的界面了.. 很多界面已经替换成了原生或者webview的混合界面... 做得那么杂用户体验还过得去....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- Mario游戏-低调大师作品
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8