Android的APP多版本,Android多版本共存-基于gradle实现debug版和release版app共存
在开发中,测试环境与正式环境是分开的,常常需要修改配置打不同环境下的apk,而且如何在android平台下让debug和release的app共存?本着提高效率避免重复工作的目的与大家分享一个方案。
本文是基于强大的AndroidStudio的构建工具gradle来实现的。
配置应用的build.gradle文件
android{
...
buildTypes{
debug{
//在编译打包时会给包名加上后缀
applicationIdSuffix'.debug'
}
release{
}
}
...
}
之后开启Build Variants界面(在androidstudio左下角的窗口选择器可以选择),
选择不同的选项,run的时候走的就是对应的gradle配置。
230049551073205.png
权限重复的问题
如果项目中使用了第三方库,而且在AndroidManifest.xml中声明了权限,例如个推
android:name="getui.permission.GetuiService.package_name"
android:protectionLevel="normal"/>
android5.0以上安装应用时会报duplicate permission exception,所以要保证debug和release安装包的permisson name不同,
可以在gradle文件下debug和release节点下配置一个字段,然后在AndroidManifest.xml中引用来实现打包时动态配置AndroidManifest.xml中的信息,如下:
修改AndroidManifest.xml
android:name="${getui_name}"
android:protectionLevel="normal"/>
配置build.gradle
debug{
applicationIdSuffix'.debug'
getui_name:"getui.permission.GetuiService.package_name_debug",
}
release{
getui_name:"getui.permission.GetuiService.package_name",
}
AndroidManifest.xml其他动态信息也可以采用这种方式配置,如app_name,可以实现测试包和正式包的名字不同。
代码中使用geadle中的动态字段
例如:可以在gradle文件中debug和release节点下如下配置字段,然后在代码中以BuildConfig.IS_DEBUG形式来引用
release{
...
buildConfigField "boolean", "IS_DEBUG", "false"
...
}
debug{
...
buildConfigField "boolean", "YY_DEBUG", "true"
...
}
PS
AndroidManifest.xml如果配置了provider,也需要采用上面的方式配置provider的
android:authorities属性,只要保证名称不同即可,否则安装会报异常。
包名加了后缀后,微信无法调起,所以测试时如果设计微信则要处理一下。
Android的APP多版本,Android多版本共存-基于gradle实现debug版和release版app共存相关推荐
- Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar...
Android Studio 升级到3.0后出现各种编译问题,其中有一个问题是关于资源找不到的问题,百度了半天,也没有相关的文章 C:\Users.gradle\caches\transforms-1 ...
- Android通过gradle实现debug和release包名不同
在Android项目中,默认debug版与release版的包名相同,从而导致debug版与release版两者不能共存,为了方便开发时的调试,通过gradle我们可以实现让两者在一台手机上共存 配置 ...
- assert 闪退 android,strcpy函数导致release版程序崩溃
最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...
- Android版APP全新上线,12306订票App更新3.0版本 Android系统已上线
[TechWeb报道]最近,12306 APP迎来了重要更新,3.0版本的Android平台已经上线,不过iOS版本还没有更新,预计很快就会到来.这次更新后交互界面和使用逻辑没有明显的变化,但风格有一 ...
- Android APP通过浏览器下载最新版本
Android APP通过浏览器下载最新版本 首先判断app本地的版本和服务器上的版本是否是一样的.如果有新版本,那么就进行更新. 需要服务器端提供两个接口 获取服务器端apk版本号 apk地址 1. ...
- android获取安卓版本,Android开发:获取安卓App版本号的方法步骤
今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的日子,国庆依然奋战在工作一线. 在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版 ...
- 关于《Android应用开发揭秘》中早期版本中联系人例子错误的解决办法
发现目前还有人问这个问题,就在这里在说明一下. 针对于android应用开发揭秘书中的4-5节代码不能工作的补充 首先感谢该篇文章的作者,因为网上到处转载,就不知道原作者了,在这里感谢你对本书的关于与 ...
- miui 8 android对应关系,小米回应MIUI版本和安卓版本没有对应关系 你怎么看
MIUI是基于Android原生系统和针对中国用户使用习惯开发的Android Rom,MIUI深受手机发烧友喜爱.MIUI是基于Android原生系统和针对中国用户使用习惯开发的Android Ro ...
- android androidx版本,Android AndroidX 简介与迁移
AndroidX 简介 AndroidX 是 Android 团队用于在 Jetpack 中开发,测试,打包,版本和发布库的开源项目 . AndroidX 是对原始 Android Support L ...
最新文章
- react中使用构建缓存_如何在React中构建热图
- 宏基因组蚂蚁森林合种——胡杨专车
- 系统详细设计说明书_人工砂石骨料加工系统5个生产环节详细解读,设计要点、生产工艺...
- 自学python爬虫要多久-Python爬虫要学多久,给初学编程者的建议
- java技术学习内容_Java开发主要都学些什么内容?
- 贝叶斯网络模型具体作用
- ASP.NET MVC5总结(二)@HTML扩展
- IOS开发之视图和视图控制器
- jdk的安装(redhat)
- 1. Keras环境的安装
- CentOS系统时间与网络同步
- 春节假期,我把父母家的网络整瘫了……
- c语言先加后减程序,C语言中的加加减减
- Google奥运会彩蛋,你确定不来参加一下吗?
- [联想 ThinkPad E450c 怎么进入BIOS]
- 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏
- Android移动开发——全方面分析 Hilt 和 Koin 性能
- 【数字逻辑与数字系统设计】应对期末考(更新于2022/4/15)
- 小米手环模拟门禁卡读卡失败_工作生活好帮手 篇一:小米note3模拟门禁卡 你该不该知道的可能都在这里_安卓手机...
- oracle 02315,02315 血眼
热门文章
- 如何查看本地的崩溃log_过年回家,还怕抢不到票?程序员教你如何抢票
- 计算机组成原理 参考,计算机组成原理参考练习
- 使用python学线性代数_二项式过程| 使用Python的线性代数
- inputstream示例_Java InputStream available()方法与示例
- expm1_Java Math类静态double expm1(double d)及其示例
- IEPNGFix:Unclickable children of element 解决办法
- CentOS 8安装并配置NFS服务
- [深入学习C#]匿名函数、委托和Lambda表达式
- leetCode —— 1200.最小绝对差
- 快捷方式修复_Mac上的屏幕截图不起作用该如何修复?