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配置。

《Android多版本共存-基于gradle实现debug版和release版app共存》 230049551073205.png

权限重复的问题
如果项目中使用了第三方库,而且在AndroidManifest.xml中声明了权限,例如个推

<permission
    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
<permission
        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属性,只要保证名称不同即可,否则安装会报异常。

  • 包名加了后缀后,微信无法调起,所以测试时如果设计微信则要处理一下。

    原文作者:子质
    原文地址: https://www.jianshu.com/p/3724533dcd6a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞