同一个应用安装两个apk在同一个手机的方法

对应安卓应用对比测试,有时候需要在同一个手机上安装release 和 debug 两个版本或者,有其他特殊定制需求版本,

此时两个apk的代码基本相同,但是由于包名相同,无法同时安装两个,此时可以通过如下配置:

 

buildTypes {

    debug {
        applicationIdSuffix "debug"
    }

    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

即通过applicationIdSuffix 属性配置后,编译时会自动修改manifest.xml中的包名:

 

需要注意的是,如果你的代码中有使用Provider, 那么一定要记住修改其authorities,否则安装时会还是会报错误:

因为存在相同的provider name, 所以方便的做法时将authorities 也修改为带有 applicationId 部分,然后只用修改这个Id 就可以实现同一个apk 安装多个不同版本了。

 

在Manifest中使用${applicationId}


如Provider在声明android:authorities(该值必须唯一)时,如前缀为写死的包名字符串,当出现需要同一工程分包、分渠道打包时,安装在同一android设备将导致 INSTALL FAILED CONFLICTING PROVIDER 的报错(使用adb安装会有提示),这时可以使用${applicationId},这将避免android:authorities值非唯一的问题。

<provider
    android:name="xxxx.xxxx.xxx.xxxProvider"
    android:authorities="${applicationId}.xxxx"
    android:grantUriPermissions="true"
    android:exported="false"/>12345
${applicationId}也可以用在Manifest中其他需要唯一的取值情况,这种使用方式很灵活。

 

 

ContentProvider中authority要与声明的一致。
authorities匹配是根据UriMather.addUri(authority,path,code)。需要动态获取包名,不能写固定值(com.xx.xx.provider)。
// TODO: Android7.0 upgrade
String authorities = context.getPackageName() + FILE_PROVIDER_AUTHORTIES;
Uri contentUri = FileProvider.getUriForFile(context, authorities, newFile);

 

 

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值