如何从同一Android项目安装两个仅名称不同的APK版本
嘿,这个需求太常见了,我帮你梳理两个靠谱的实现方案,都是Android开发里常用的套路:
核心逻辑先讲清楚
Android系统是靠applicationId来区分不同应用的——哪怕两个app的代码几乎一样,只要applicationId不一样,系统就会把它们当成完全独立的应用,自然就能同时安装。而应用名称的区分,只要对应修改字符串资源就行。
方案一:用构建变体(Build Flavors)【推荐】
这种方式最灵活,后续要是想加更多版本(比如免费版/付费版)也能轻松扩展,一步到位。
- 打开模块级的
build.gradle文件(就是app目录下的那个),在android代码块里添加产品风味配置:
android { // 保留你原来的compileSdk、defaultConfig这些配置 flavorDimensions "version" productFlavors { original { dimension "version" applicationId "com.your.original.package" // 原应用的包名,改成你自己的 resValue "string", "app_name", "我的原应用" // 原应用名称 } variant { dimension "version" applicationId "com.your.variant.package" // 变体应用的包名,必须和原应用不一样 resValue "string", "app_name", "我的变体应用" // 变体应用名称 } } }
这里的resValue是动态生成字符串资源,这样不用手动去改strings.xml,构建时会自动对应不同的flavor生成对应的app_name。
- 检查你的
AndroidManifest.xml里,应用名称是不是引用的@string/app_name:
<application android:label="@string/app_name" // 其他属性保留不动 >
要是原来写的是硬编码的文字,改成引用这个字符串资源就行。
- 构建安装:打开Android Studio右侧的Build Variants面板,分别选择
originalDebug和variantDebug,每次选完点运行按钮,就能把两个版本都装到设备上了——甚至可以同时运行两个app。
方案二:手动复制模块【适合临时需求】
如果只是临时要两个版本,不想折腾构建变体,直接复制模块更简单:
- 在Project视图下,右键点击你的app模块,选
Copy,然后粘贴成一个新模块(比如叫app-variant)。 - 打开新模块的
build.gradle,把defaultConfig里的applicationId改成和原模块不一样的值:
android { defaultConfig { applicationId "com.your.variant.package" // 新的包名 // 其他配置比如minSdkVersion这些可以和原模块保持一致 } }
- 打开新模块的
res/values/strings.xml,把app_name改成你想要的变体名称:
<string name="app_name">我的变体应用</string>
- 给新模块创建运行配置:点击Android Studio顶部的运行配置下拉框,选
Edit Configurations,点加号新建一个Android App配置,模块选择刚复制的app-variant,然后分别运行原模块和新模块就行。
小提醒
- 两个版本的
applicationId必须完全不同,哪怕只是最后加个.test或者.variant都可以,千万别一样! - 不同applicationId的app,数据是完全隔离的——比如SharedPreferences、数据库这些,两个版本互相看不到对方的数据,这点要注意。
- 用构建变体的话,后续还能给不同版本配置不同的图标、权限甚至代码逻辑,扩展性拉满,所以更推荐这个方案。
内容的提问来源于stack exchange,提问作者Waarx
相关产品推荐
相关产品推荐

