在同一台Android设备上,是否可以同时安装多个同一项目的APK?

前言

通常情况下,当我们在一台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,可以在下面的图中看到:

95d0e3493429

在这里插入图片描述

另一种方式:风味多样

productFlavors {
}

pro{

applicationIdSuffix ‘.pro’

}

免费 {

将“applicationIdSuffix “.free””改写为“应用程序ID后缀为“.free””。

}

}

或者:

productFlavors {
}

专业 {

applicationId = com.myApp.pro

}

免费 {

applicationId = com.myApp.free

}

}

95d0e3493429

在这里插入图片描述

在这种情况下,您可以利用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发布,该项目的包名将无法更改。然而,通常情况下我们也不会轻易修改包名。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注