在开发中,测试环境与正式环境是分开的,常常需要修改配置打不同环境下的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共存相关推荐

  1. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar...

    Android Studio 升级到3.0后出现各种编译问题,其中有一个问题是关于资源找不到的问题,百度了半天,也没有相关的文章 C:\Users.gradle\caches\transforms-1 ...

  2. Android通过gradle实现debug和release包名不同

    在Android项目中,默认debug版与release版的包名相同,从而导致debug版与release版两者不能共存,为了方便开发时的调试,通过gradle我们可以实现让两者在一台手机上共存 配置 ...

  3. assert 闪退 android,strcpy函数导致release版程序崩溃

    最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...

  4. Android版APP全新上线,12306订票App更新3.0版本 Android系统已上线

    [TechWeb报道]最近,12306 APP迎来了重要更新,3.0版本的Android平台已经上线,不过iOS版本还没有更新,预计很快就会到来.这次更新后交互界面和使用逻辑没有明显的变化,但风格有一 ...

  5. Android APP通过浏览器下载最新版本

    Android APP通过浏览器下载最新版本 首先判断app本地的版本和服务器上的版本是否是一样的.如果有新版本,那么就进行更新. 需要服务器端提供两个接口 获取服务器端apk版本号 apk地址 1. ...

  6. android获取安卓版本,Android开发:获取安卓App版本号的方法步骤

    今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的日子,国庆依然奋战在工作一线. 在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版 ...

  7. 关于《Android应用开发揭秘》中早期版本中联系人例子错误的解决办法

    发现目前还有人问这个问题,就在这里在说明一下. 针对于android应用开发揭秘书中的4-5节代码不能工作的补充 首先感谢该篇文章的作者,因为网上到处转载,就不知道原作者了,在这里感谢你对本书的关于与 ...

  8. miui 8 android对应关系,小米回应MIUI版本和安卓版本没有对应关系 你怎么看

    MIUI是基于Android原生系统和针对中国用户使用习惯开发的Android Rom,MIUI深受手机发烧友喜爱.MIUI是基于Android原生系统和针对中国用户使用习惯开发的Android Ro ...

  9. android androidx版本,Android AndroidX 简介与迁移

    AndroidX 简介 AndroidX 是 Android 团队用于在 Jetpack 中开发,测试,打包,版本和发布库的开源项目 . AndroidX 是对原始 Android Support L ...

最新文章

  1. react中使用构建缓存_如何在React中构建热图
  2. 宏基因组蚂蚁森林合种——胡杨专车
  3. 系统详细设计说明书_人工砂石骨料加工系统5个生产环节详细解读,设计要点、生产工艺...
  4. 自学python爬虫要多久-Python爬虫要学多久,给初学编程者的建议
  5. java技术学习内容_Java开发主要都学些什么内容?
  6. 贝叶斯网络模型具体作用
  7. ASP.NET MVC5总结(二)@HTML扩展
  8. IOS开发之视图和视图控制器
  9. jdk的安装(redhat)
  10. 1. Keras环境的安装
  11. CentOS系统时间与网络同步
  12. 春节假期,我把父母家的网络整瘫了……
  13. c语言先加后减程序,C语言中的加加减减
  14. Google奥运会彩蛋,你确定不来参加一下吗?
  15. [联想 ThinkPad E450c 怎么进入BIOS]
  16. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏
  17. Android移动开发——全方面分析 Hilt 和 Koin 性能
  18. 【数字逻辑与数字系统设计】应对期末考(更新于2022/4/15)
  19. 小米手环模拟门禁卡读卡失败_工作生活好帮手 篇一:小米note3模拟门禁卡 你该不该知道的可能都在这里_安卓手机...
  20. oracle 02315,02315 血眼

热门文章

  1. 如何查看本地的崩溃log_过年回家,还怕抢不到票?程序员教你如何抢票
  2. 计算机组成原理 参考,计算机组成原理参考练习
  3. 使用python学线性代数_二项式过程| 使用Python的线性代数
  4. inputstream示例_Java InputStream available()方法与示例
  5. expm1_Java Math类静态double expm1(double d)及其示例
  6. IEPNGFix:Unclickable children of element 解决办法
  7. CentOS 8安装并配置NFS服务
  8. [深入学习C#]匿名函数、委托和Lambda表达式
  9. leetCode —— 1200.最小绝对差
  10. 快捷方式修复_Mac上的屏幕截图不起作用该如何修复?