Android 多渠道打包 App 名称,图标,包名,应用入口SplashActivity

    最近有个需求,主功能不会变,但是图标,应用包名,名称需要改变,甚至 启动页也要定制化。之前是每次手动改动代码,随着业务发展的需要,这种方法不仅笨重,而且容易出错。所以就需要定制化打包的功能了。

productFlavors 新增渠道

使用Gradle 可以愉快的配置 多渠道包,在App gradle 里 android 闭包下配置:

三个 渠道 分别是免费版 中国版,美国版。

    productFlavors {

        free {
            applicationId 'com.lqr.demo.free'
          
        }
        china {
            applicationId 'com.lqr.demo.china'
          
        }
        america {
            applicationId 'com.lqr.demo.america'
          
        }
    }

sync 后 左下角 Build Variants 会产生三个变体,可以自由选择编译的渠道。

添加 版本号,更换图标和名称:

 productFlavors {

        free {
            applicationId 'com.lqr.demo.free'
            versionCode 32
            versionName '1.3.2'
            manifestPlaceholders = [
                    app_icon: "@mipmap/app_icon",
                    app_name: "@string/app_name",
            ]
        }
        china {
            applicationId 'com.lqr.demo.china'
            versionCode 32
            versionName '1.3.2'
            manifestPlaceholders = [
                    app_icon: "@mipmap/app_icon",
                    app_name: "@string/app_name",
            ]
        }
        america {
            applicationId 'com.lqr.demo.america'
            versionCode 32
            versionName '1.3.2'
            //resValue "string", "app_name", "@string/app_name"
            manifestPlaceholders = [
                    app_icon: "@mipmap/app_icon",
                    app_name: "@string/app_name",
            ]
        }
    }

manifest 文件 更改如下: icon 和 label 分别 用"${app_icon}" 和 "${app_name}"

这样app名称,图标 ,包名 是通过多渠道打包完成了。但是更换应用 入口,就没有那么容易了,这里我参考了不一样的Gradle多渠道配置总结,我遇到的需求和他差不多,需要第三方应用市场启动,包名和启动页有一定的规律。

这里采用和GitLqr 一样的方法:把SpalshActivity 抽离出来,每个渠道新建一个文件夹,对应包名和一些资源文件。

 

Android 多渠道打包 App 名称,图标,包名,应用入口SplashActivity_第1张图片

创建 support 文件夹,下面创建一个manifest文件夹,分别创建多渠道目录,每个包目录下,manifest文件设置单独的入口,例如美国版:

 

Android 多渠道打包 App 名称,图标,包名,应用入口SplashActivity_第2张图片

 




    
        
            
                
                
            
        
    


每个渠道都可以设置单独的入口。sourcesSet 配置:

    sourceSets {
        sourceSets.all { sourceSet ->
            // project.logger.log(LogLevel.ERROR, "sourceSet.name = " + sourceSet.name)
            if (sourceSet.name.contains('Debug') || sourceSet.name.contains('Release')) {
                if (sourceSet.name.contains("china")) {
                    sourceSet.manifest.srcFile 'support/manifest/chinaapp/AndroidManifest.xml'
                } else if(sourceSet.name.contains("free")){
                    sourceSet.manifest.srcFile 'support/manifest/freeapp/AndroidManifest.xml'
                }  else{
                    sourceSet.manifest.srcFile 'support/manifest/americaapp/AndroidManifest.xml'
                }
            }
        }
    }

通过变体来设置不同的渠道,打包不同的包名,图标,启动入口。

代码示例:

多渠道打包

 

你可能感兴趣的:(工具,android,java)