近期得到这样一个需求,产品要求在原有项目功能不变动的情况下重新打包一个不同包名不同应用名不同图标的应用方便测试进行功能试验。所以就有了下面这篇文章,可能写的不太完善,仅供大家参考。如果大家有更好的方案欢迎留言评论,大家共同进步。
首先在APP下的build.gradle中配置
productFlavors
productFlavors { wisdom { //基础版本. applicationId "应用包名" resValue "string", "app_name", "应用名称" manifestPlaceholders = [app_icon : "应用图标", package_name : applicationId, //下面这些配置根据自己需求进行各自配置 WEIBO_APPKEY : "微博APPKEY", JPUSH_PKGNAME: 接受推送的包名, JPUSH_APPKEY : "极光推送的APPKEY", //JPush上注册的包名对应的appkey. JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] } sim { //新版本 applicationId "新的应用包名" resValue "string", "app_name", "新的应用名称" manifestPlaceholders = [app_icon : "新的应用图标", package_name : applicationId, WEIBO_APPKEY : "微博APPKEY", JPUSH_PKGNAME: 接受推送的包名, JPUSH_APPKEY : "极光推送的APPKEY", //JPush上注册的包名对应的appkey. JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] } }
这就是在build.gradle中进行的配置。
下面还需要在AndroidManifest.xml文件中进行一些修改.
首先application中
android:icon="${app_icon}"icon图不能写成固定的,要根据gradle中配置的进行更改。
好了配置到这样基本大功告成了,现在信心满满高高兴兴的运行项目了。。。
高兴、开心、兴奋。。。。。
阿西吧,我明明改过包名也进行过相关配置了啊,怎么还让我卸载原有的APP。。
经过一顿查阅资料,原来是provider权限问题导致的。。那怎么解决呢 。。
其实也没有那么难,只需要在AndroidManifest.xml文件中进行provider的配置即可。。
具体如下:
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${package_name}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
android:authorities="${package_name}.provider"主要是这一行的配置,原来这里我是写死的才会导致让我卸载原有应用,一定注意这一行配置一定要写成和gradle中配置的相应的包名。。
现在运行,OK两个应用能够共存了。。