Android 多渠道打包(同一个工程不同包名,不同服务器地址等)

简介: 一、参考1、多渠道打包——同一台设备上同时安装你的正式与测试环境APP2、Android多渠道打包没你想的那么复杂3、多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源二、应用场景1、一个APP针对多个应用...

一、参考

1、多渠道打包——同一台设备上同时安装你的正式与测试环境APP
2、Android多渠道打包没你想的那么复杂
3、多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源

二、应用场景

1、一个APP针对多个应用市场,需要在不同应用市场看日活啊等等的
2、同一个工程代码,但是需要用到不同的省市区、挂在不同的服务器下面,等于多个有一样功能但又互相独立的APP,可以多个同时安装在手机上面
3、其他

三、效果图

img_1f29da60e17d40104e74c391a8e7a08d.png
icon2.png
img_22418701b2cec8e2e9e91a6d1fdd6d87.png
myapp.png
img_f457258082f9aa0d1cb0f039c4263bed.png
yourapp.png

四、实例:以应用场景2作为案例

1、app/build.gradle 文件的修改,增加:productFlavors

1.1、defaultConfig注释掉原本的applicationId,不然会和多渠道内的包名有冲突
1.2、versionCode和versionName也可以配置进productFlavors中去,不多说
1.3、buildTypes暂时就用默认的
1.4、productFlavors下一般有这几部分组成

定义 内容
applicationId 某个取到的应用包名
resValue 针对资源文件,包含string.xml等,注意两点,(1)keyname一定要有且一致 (2)原本main目录下的keyname注释掉,分别增加多渠道通道的资源文件库,后面会截图显示
buildConfigField 自动建立BuildConfig文件中的动态常量,注意String值的话是‘ “ xxx ” ’这样的格式
manifestPlaceholders 清单文件里可动态替换的内容,这里一般由打包的apk名字,还有fileprovider等等,还有各种第三方key,比如友盟,极光推送等等

1.5、学习几个英语单词,加深理解

英文 中文
Variants 变体 - 所以应该叫‘多变体打包’--好难听
Flavors 特点 - 变体的特点/渠道的特点--就是需要替换的动态常量
Channel 渠道 - 这个才是渠道吗~~AS里完全没有,但是好听呀
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        //因为多渠道已经有包名了,此处注释掉
        //applicationId "com.flavor.test.flavortestapp"
        minSdkVersion 14
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    //默认的,会有release和隐藏的debug
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    /**
     * 多渠道打包
     * 1、applicationId      = 软件-包名
     * 2、app_name           = 资源文件string.xml下的,需要建立不同的res目录
     * 3、BASE_SERVER_URL    = 基础服务器地址,在自动创建BuildConfig下
     * 4、APP_File_Provider  = 文件provider,一般是包名+fileprovider命名
     * 5、其他所需要配置的百度Key,极光推送key,友盟key等等...
     * */
    productFlavors {


        //我的APP
        my_app{
            applicationId "com.flavor.myapp"
            resValue "string", "app_name", "APP-我的"
            buildConfigField "String"   , "APP_File_Provider"      , '"com.flavor.myapp.fileprovider"'
            buildConfigField "String"   , "BASE_SERVER_URL"        , '"http://my/app/"'
            //manifest里面的值
            manifestPlaceholders = [
                    MTA_CHANNEL_VALUE   : "my_app",
                    FILE_PROVIDER       : "com.flavor.myapp.fileprovider" ]
        }


        //你的APP
        your_app{
            applicationId "com.flavor.yourapp"
            resValue "string", "app_name", "APP-你的"
            buildConfigField "String"   , "APP_File_Provider"      , '"com.flavor.yourapp.fileprovider"'
            buildConfigField "String"   , "BASE_SERVER_URL"        , '"http://your/app/"'
            //manifest里面的值
            manifestPlaceholders = [
                    MTA_CHANNEL_VALUE   : "your_app",
                    FILE_PROVIDER       : "com.flavor.yourapp.fileprovider" ]
        }


    }

    /**
     * 打包导出apk时候的名字,或者各种服务的key配置等等
     * */
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile

            //如果打包release版本,则包名为  xx取到.apk
            if (variant.buildType.name.equals('release')) {
                def fileName = "Channel${defaultConfig.versionName}_${variant.productFlavors[0].name}"+releaseTime()+".apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }


}

//打包时间
def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

2、需要修改的工程目录和调试

这里my_app和your_app目录下的mipmap和values分别就改了唯一需要动态改变的图片和值,比如string.xml下的app_name,原本main下values中string.xml的app_name注释掉


img_074238c777a50d61a086c61fa7153623.png
aa.png
<resources>
    <string name="app_name">APP-你的</string>
</resources>

3、清单文件

img_5376ea1ad243b78bcc2bae1f990a87fd.png
manifest.png
目录
相关文章
|
10天前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
22 4
|
8天前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
10天前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
25 2
|
2天前
|
流计算
实时计算 Flink版操作报错之程序在idea跑没问题,打包在服务器跑就一直报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
10天前
|
Java 关系型数据库 MySQL
保姆级教程——将springboot项目部署到阿里云服务器包含环境配置(小白包会)
本文档详细介绍了将SpringBoot项目部署到阿里云服务器的步骤。首先,通过Xshell连接服务器,使用公网IP地址。接着,下载JDK的Linux版本,使用XFTP上传并解压,配置环境变量。然后,安装MySQL 5.7,包括下载YUM源、安装、启动服务以及修改root密码和开启远程访问。最后,将SpringBoot项目打包成jar,上传至服务器,使用`java -jar`命令运行,通过`nohup`确保服务持续运行。配置安全组以允许远程访问。
|
10天前
|
Ubuntu Android开发 数据安全/隐私保护
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
|
10天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
64 0
|
3天前
|
存储 弹性计算 监控
【阿里云弹性计算】阿里云 ECS 性能优化秘籍:提升应用响应速度与资源利用率
【5月更文挑战第22天】阿里云ECS优化涉及实例规格选择、OS与应用配置、网络配置、存储优化及数据库连接池管理。合理挑选CPU和内存,关闭无关服务,利用EIP和负载均衡优化网络,选择合适存储类型,并通过监控工具进行性能分析和压力测试,以提升响应速度,优化资源利用率,降低成本,增强企业竞争力。示例展示了Java数据库连接池配置优化。通过持续探索和实践,可最大化发挥ECS潜力。
64 7
|
1天前
|
存储 机器学习/深度学习 弹性计算
【阿里云弹性计算】阿里云ECS实例选择指南:理解不同实例系列的适用场景
【5月更文挑战第24天】阿里云ECS实例系列包括计算优化型、内存优化型、存储优化型、GPU加速型和通用型,适用于不同场景。计算优化型适合计算密集型任务,内存优化型适用于内存数据库,存储优化型针对高I/O需求,GPU加速型用于图形处理和深度学习,通用型则平衡各类需求。选择时需考虑应用类型、性能需求、成本效益和可扩展性。提供的示例代码展示了如何使用阿里云CLI创建通用型实例。本文旨在帮助用户根据业务需求选择最适合的ECS实例。
6 1

热门文章

最新文章