Android修行手册 – 一套源码发布多个apk(多包名,多名称,多Logo)

Unity3D特效百例 案例项目实战源码 Android-Unity实战问题汇总
游戏脚本-辅助自动化 Android控件全解手册 再战Android系列
Scratch编程案例 软考全系列 Unity3D学习专栏
蓝桥系列 ChatGPT和AIGC

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

有什么需要欢迎底部卡片私我,交流让学习不再孤单

在这里插入图片描述

👉实践过程

😜需求

公司产品是对医学的,整体设计基本兼容所有科室,但这样卖的贵,就用一套代码区分了多个科室,假装是单科室的产品,卖的便宜些。

因此发布apk的时候,可能就会存在很多个,目前就当前代码,改个应用名和logo以及首页图,就发布出8个产品了。要想工作少,不复制代码,还要在同一个设备上能够同时存在,就必须得这么干。

😜操作

找到你的主项目的 build.gradle 文件,修改如下:

android {
 ...
    productFlavors {
        appOne { //appOne自己随便换名字
            // 设置applicationId(这里很重要,两个相同applicationId的apk不同同时安装在同一台Android手机中)
            applicationId "com.zhima.demo"
            // 定义app_icon字段,在AndroidManifest.xml文件中用到
            manifestPlaceholders = [app_icon: "@mipmap/ic_launcher", app_name: "测试-1"]  //设置启动logo和应用名称
        }
        appTwo { //appTwo自己随便换名字
            applicationId "com.zhima.demo1"
            manifestPlaceholders = [app_icon: "@mipmap/ic_launcher1", app_name: "测试-1"]
        }
    }
}

接着我们需要找到 AndroidManifest.xml 文件,修改 icon 和 label 为动态变量

在这里插入图片描述

变量名就是我们在 build 中设置的。这时候你会发现 app_icon是红色?不要紧,只需要在 build 中怎么加忽略设置即可。

android {
 ...
 lintOptions {
  checkReleaseBuilds false
  abortOnError false
 }
}

然后删除你的 res/values/strings.xml 里的app_name字符变量。切记要删除。

首页不同背景图怎么做?

这就很简单了,启动后在 onCreate 中获取 app 名称?获取包名?自己做区分就好业务就ok了。

😜其他问题

如果你只是个小 demo 测试下,那么上面的操作基本没问题,但是实际项目用到的技术很多,首先第一个就是 app_name 冲突。

你依赖了多个三方框架,其中一个框架的 AndroidManifest 里面也有app_name,这时候你可以下载框架源码,用源码依赖的形式,然后删除里面的app_name。

可如果你不想源码依赖怎么办?那就需要在你自己的主项目 application 下添加 tools:replace=”android:label” 属性解决

另一个问题:

Error:All flavors must now belong to a named flavor dimension.Learn more at

这个一个错误,意思是:所有的flavors都必须属于同一个风格。这是为了避免flavor 不同产生误差的问题,应该在所有的库模块都使用同一个foo尺寸。

不明白?没关系,作者也不明白,能用就行了。哈哈哈

在主app的build.gradle里面的

 defaultConfig {
 //......
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
flavorDimensions "versionCode"
}

再填一坑:

如果你的项目发包后安装的时候提示:xx有相同组件之类的。基本就是有些唯一属性值方面的技术没有进行更改。比如provider。

在AndroidManifest文件定义了一个provider

在这里插入图片描述

记住,provider标签的authorities属性的值一定要是唯一的,如果两个app的authorities属性值一样,就会提示安装失败,一定要记住!!

这就需要仿照前面的形式,再自定义个 provider_name 变量即可。

最终你就可以愉快的打包啦,打包的时候会提示你选择哪几个包。

在这里插入图片描述

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:https://zhima.blog.csdn.net/

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示:点击下方卡片获取更多意想不到的资源。

空名先生

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/e3b2638ef5.html