1、首先我们使用Idea(AndroidStudio或者Eclipse也行)写一个Java类,简单地返回一个字符串标识:
Main.java
package com.wushaohong.jar;
public class Main {
public static void main(String[] args) {
}
public String getTag() {
return "Release";
}
}
2、打包成一个jar(不知道如何打包jar移步搜索引擎),命名为jarRelease.jar;再将代码的getTag方法return "Release"改成return "Debug",再打包成一个jar,命名为jarDebug.jar。得到两个jar包,jarRelease.jar与jarDebug.jar。
jar包
3、AndroidStudio创建新的项目,将两个jar包,拷贝到app/libs目录下。
***注意事项看注释解释
4、配置多渠道与渠道加载依赖
app.gradle文件
defaultConfig {
...
flavorDimensions "versionCode"
}
buildTypes {
...
}
// 多渠道打包方式
productFlavors {
// 线下(测试环境)
offline {
versionName "offline"
// 配置不同的String,key:config_file,value:offline.properties
resValue("string", "config_file", "offline.properties")
}
// 准线上(生产环境,比如带日志等)
beforeOnline {
versionName "beforeonline"
resValue("string", "config_file", "beforeonline.properties")
}
// 线上(发布版本)
online {
versionName "online"
resValue("string", "config_file", "online.properties")
}
}
dependencies {
// 此处是创建项目默认生成,需要注释掉,如果不注释,每次打包都会把libs目录下所有的jar包打包到apk;
// 再者,因为我们开始生成的jar的源代码包名是一样的,会出现jar重复冲突等多种问题。
// implementation fileTree(dir: 'libs', include: ['*.jar'])
...
// 渠道名+Implementation,指定某个渠道包引入某个依赖;
// 这里我们线下引用Debug.jar,线上引用Release.jar。
offlineImplementation(files('libs/JarDebug.jar'))
beforeOnlineImplementation(files('libs/JarRelease.jar'))
onlineImplementation(files('libs/JarRelease.jar'))
}
5、创建渠道代码(资源等),在src(main同级)目录下,分别创建与渠道名相同的文件夹,offline、beforeOnline、online。各个目录下创建与main相同的子目录/文件,java/包名(与main一致),res(资源文件夹),AndroidManifest.xml。
***当然这些不一定都要创建,具体根据实际需要就好,比如需要区分代码的,则需要java目录,区分资源则需要res目录,涉及到配置AndroidManifest.xml则需要创建。这些文件目录,在实际编译打包引用会与main进行合并。
渠道代码/资源
创建渠道测试代码,为了使每个渠道包在main当中都能够调用PushUtils,所有这里,每个渠道都写一个结构一致的PushUtils类,实际的getToken(业务方法)可以不一样,本文为了验证渠道依赖,所以这里每个渠道都写成一样,都是调用jar包返回一个字符串标识(验证实际调用的是否为gradle配置指定的jar)。
PushUtils.java
package com.wushaohong.productflavorsapp;
import com.wushaohong.jar.*;
public class PushUtils {
public String getToken() {
Main t = new Main();
return t.getTag();
}
}
6、验证
在MainActivity当中验证结果
// 将PushUtils返回的字符串显示在文本当中
textView.setText(new PushUtils().getToken());
运行,Build Variants选择offlineDebug,文本显示Debug。这是jarDebug.jar返回的,因为我们之前gradle配置了offlineImplementation(files('libs/JarDebug.jar'));同理,选择onlineDebug运行,则文本显示Release。
选择渠道构建验证apk,使用assembleRelease生成各个apk,在AndroidStudio里,双击apk查看,找到对应代码,查看编译后的ByteCode。
编译打包所有渠道
查看apk
查看ByteCode
7、最后,本文当中,使用assembleRelease构建出来的各个渠道包是未加签名的,如需了解配置签名打包,请移步我的另一篇文章:
https://blog.csdn.net/c_3822/article/details/95058358
网友评论