在同一台android设备上安装多个同一项目的apk
前言
通常我们在一台android设备上(无论是真机还是模拟器),安装相同包名的apk应用都只能安装一个应用,如果设备上已经安装了一个apk,如何再次安装这个apk就会覆盖前面的应用,如果想要安装在同一台设备上安装多个相同的apk,唯一的办法只能是改包名了。简单的项目还好,当个一个项目中有许多的类的时候,手动去更改包名一定是一种不可取的方式。那么有没有什么简单的办解决呢?
解决办法:
在app下面的bulid.gradle中添加如下代码:
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { applicationIdSuffix ".free" } } }
没错,你可以看到applicationIdSuffix ".free"这一行关键的代码。就是这一句代码,使得我们的包名变成了packageName.free,比如:我们包名是com.myApp,加上这句后,生成的apk的包名就会变成com.myApp.free,这里的free可以根据自己的打包用途来命名。
上这种方式就是BuildTypes,可以在下面的图中看到:
另外一种方式Flavors
productFlavors { pro{ applicationIdSuffix ".pro" } free { applicationIdSuffix ".free" } }
或者:
productFlavors { pro { applicationId = "com.myApp.pro" } free { applicationId = "com.myApp.free" } }
这时候使用Build Variants就可以选择自己需要打包的版本
下面是我生成的apk
手机上安装的应用:
上面三个应用都是同一个项目,只是经过处理后,就都可以在同一台设备上安装了(因为这是三个的包名是不相同的)。
需要注意的是:
productFlavors { pro { applicationId = "com.myApp.pro" } free { applicationId = "com.myApp.free" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { applicationIdSuffix ".test" } }
如果同时使用两种方式,buildTypes 中的设置后缀会跟在productFlavors 中设置的包名后面,这时候包名就会变成com.myApp.pro.test和com.myApp.free.test.
Ok这时我们就可以在同一台设备上安装多个同一项目的apk了
总结:
Application ID可以说是一个android项目的唯一标识,是不可修改的,在android studio中的bulid.gradle下,如下:
android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.myApp" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }
并且Application ID和package的属性值不一样的,虽然不一样,但是当我们在构建项目的时候,会复制Application ID给package的属性值,并且这个属性值是唯一的,package属性才是真正作为您应用程序唯一身份凭证。
当我们打开apk中的AndroidMainifest.xml文件时就可以看到,package和我们设置的一样了。
这就是为什么可以在同一台设备上安装的原因。
如何我们的apk已发布,这个项目的包名就是不可修改的了,不过我们一般也不会轻易修改包名。
android { compileSdkVersion 26 buildToolsVersion '26.0.2' defaultConfig { applicationId "com.xxx.www.xxx" minSdkVersion 16 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了 flavorDimensions "versionCode" }
否则会报
Error:All flavors must now belong to a named flavor dimension.Learn more at https
作者:圣剑Jay
链接:https://www.jianshu.com/p/95d0e3493429/
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
相关文章
- 对Android设备CPU进行锁频
- Android 中常见控件的介绍和使用
- Android Jetpack架构组件(四)之LiveData
- 华为多名高管职务发生变动;俄罗斯计划2030年实现28纳米芯片自产;Android 2021年0day漏洞回顾|极客头条
- Android系统两大漏洞曝光:影响超10亿台设备
- Android Studio官方文档: 如何在你的设备上运行你的程序
- 如何计算android设备的屏幕物理尺寸
- Android实例-使用电话拨号器在移动设备上
- Android视频录制命令screenrecord
- Android上又双叒冒出新的恶意软件:ROOT近800万台设备、狂发广告骗推广费
- android qemu-kvm i8254 pit虚拟设备
- android emulator虚拟设备分析第三篇之pipe上的qemud service
- Android的application使用
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Android Imageview 图片置灰,图片特殊节日去真彩色
- android 蓝牙设备监听广播
- 获取Android设备电池电量状态
- android OOM分析工具LeakCanary