前言
通常情况下,当我们在一台Android设备上安装具有相同包名的APK应用时,只能安装一个应用。如果设备上已经安装了一个APK,再次安装该APK将会覆盖之前的应用。如果想要在同一台设备上安装多个相同包名的APK,唯一的解决办法就是修改包名。对于简单的项目来说还好,但当一个项目中有许多类时,手动更改包名绝对不是可取的方式。那么是否存在某种简便方法来解决这个问题呢?
应对策略:
请在app的build.gradle文件中添加以下代码:
buildTypes { // 在这里添加你的自定义构建类型 }
发布 {
禁用代码压缩
proguardFiles(getDefaultProguardFile(proguard-android.txt), proguard-rules.pro)
}
修复 {
将“applicationIdSuffix ".free"”改写为“应用程序ID后缀为“.free””。
}
}
}
没错,你可以看到将“applicationIdSuffix ".free"”改写为“应用程序ID后缀为“.free””。这一行关键的代码。就是这一句代码,使得我们的包名变成了packageName.free,比如:我们包名是com.myApp,加上这句后,生成的apk的包名就会变成com.myApp.free,这里的free可以根据自己的打包用途来命名。
上这种方式就是BuildTypes,可以在下面的图中看到:
在这里插入图片描述
另一种方式:风味多样
productFlavors { }
pro{
applicationIdSuffix '.pro'
}
免费 {
将“applicationIdSuffix ".free"”改写为“应用程序ID后缀为“.free””。
}
}
或者:
productFlavors { }
专业 {
applicationId = com.myApp.pro
}
免费 {
applicationId = com.myApp.free
}
}
在这里插入图片描述
在这种情况下,您可以利用Build Variants来选择所需打包版本。
下面是我生成的apk
手机上安装的应用有:
这三个应用都属于同一个项目,经过处理后可以在同一台设备上安装(因为它们的包名不相同)。
需要注意的是:
productFlavors { }
专业 {
applicationId = com.myApp.pro
}
免费 {
applicationId = com.myApp.free
}
}
buildTypes { // 在这里添加你的自定义构建类型 }
发布 {
禁用代码压缩
proguardFiles(getDefaultProguardFile(proguard-android.txt), proguard-rules.pro)
}
修复 {
将“applicationIdSuffix ".test"”改写为“应用程序ID后缀为“.test””。
}
}
当使用两种方式同时时,buildTypes中的设置后缀将会紧跟在productFlavors中设置的包名后面。因此,包名将变为com.myApp.pro.test和com.myApp.free.test。
好的,现在我们可以在同一台设备上安装多个相同项目的apk了。
总结:
在Android Studio的build.gradle文件中,Application ID是指Android项目的唯一标识,它是不可更改的。具体如下所示:
android {
使用编译SDK版本25
buildToolsVersion '25.0.2'
defaultConfig { }
applicationId "com.myApp"
最低支持版本为15
目标SDK版本为25。
版本号为1
versionName "1.0"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
并且Application ID和package的属性值不一样的,虽然不一样,但是当我们在构建项目的时候,会复制Application ID给package的属性值,并且这个属性值是唯一的,package属性才是真正作为您应用程序唯一身份凭证。
当我们浏览apk文件中的AndroidMainifest.xml时,会发现package名称与我们所设定的完全一致。
这就是为何可以在同一设备上安装的原因。
一旦我们的apk发布,该项目的包名将无法更改。然而,通常情况下我们也不会轻易修改包名。
还木有评论哦,快来抢沙发吧~