美文网首页AndroidAndroid studioAndroid开发经验谈
Android多版本共存-基于gradle实现debug版和re

Android多版本共存-基于gradle实现debug版和re

作者: 轻云时解被占用了 | 来源:发表于2016-07-09 13:20 被阅读5789次

在开发中,测试环境与正式环境是分开的,常常需要修改配置打不同环境下的apk,而且如何在android平台下让debug和release的app共存?本着提高效率避免重复工作的目的与大家分享一个方案。

本文是基于强大的AndroidStudio的构建工具gradle来实现的。

配置应用的build.gradle文件

android{
        ...
        buildTypes{
            debug{
                //在编译打包时会给包名加上后缀
                applicationIdSuffix'.debug'
            }
            release{
                
            }
        }
        ...
    }

之后开启Build Variants界面(在androidstudio左下角的窗口选择器可以选择),
选择不同的选项,run的时候走的就是对应的gradle配置。

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

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

相关文章

网友评论

  • 阿V很简单:这种debug和release共存可以提高效率,但是有些SDK以包名为根据集成的,这也是个问题啊
  • 刚刚了然:gradle里面要这么写
    release{
    manifestPlaceholders = [
    getui_name: "com.xxx.xxxx"
    ]
    }
    坑了我.
    惶然:已解决感谢提醒
    惶然:<permission
    android:name="com.delta.teaclub.permission.JPUSH_MESSAGE"
    android:protectionLevel="signature" />
    这是极光推送 应该怎么改
    静候良机:楼主需要改一下,免得其他朋友也误解,感觉不对劲,我再这里也费了很大劲,幸好看一看评论,问题就解决啦
  • 01249fa3a5f4:请问 “包名加了后缀后,微信无法调起 ”的问题如何处理?
    dc35e12e99aa:同问。。。。

本文标题:Android多版本共存-基于gradle实现debug版和re

本文链接:https://www.haomeiwen.com/subject/cmwrjttx.html