多节点: 打包 + 加固
前言: 节省非开发时间,便于多节点 出包 + 加固
一,多节点打包:
1,节点: 两个app公用一个主项目,只是在资源配置文件上有所不同
2,productFlavors作用
* 创建不同的产品
* 创建不同的产品并为不同产品分配专有属性
* 设置不同代码引用
* 先在src目录下简历对应的文件夹比如java代码则建立productjavares文件夹则建立productres
* 建立包名建立Java类文件
* 在app-level下的gradle文件中设置sourceSets
* 设置不同的产品引入不同的包
3,Example
在app:级别下的gradle文件中,加入productFlavors,并在productFlavors下创建不同app A与B
productFlavors {
//appA
exampleA {//每个项目的资源文件,包名配置等
//程序包名
applicationId "com.example.a"
//不同渠道号
manifestPlaceholders = [UMC:"product-Complete"]
//versionName
versionName "1.0.0"
//versionCode
versionCode 1
}
//appB
exampleB {
//程序包名
applicationId "com.example.b"
//不同渠道号
manifestPlaceholders = [UMC:"product-Temp"]
//versionName
versionName "2.1.1"
//versionCode
versionCode 2
}
4,AS自动打包
这里选中两个项目同时打包
二,360 加固:利用360加固保中的配置文件自动加固
1,项目中导入360加固的配置文件
2,新建一个gradle 文件,配置相关信息
ext {
//加固前apk目录(不同节点所在目录)
packageSources = "${project.rootDir}/app/package"
//加固后apk目录
jiagu_packageSources = "${project.rootDir}/app/jiagu_package"
//签名路径
keyStorePath = "${rootProject.rootDir}/app/abc.keystore"
//签名信息
KEYSTORE_PASSWORD = "123"
KEY_ALIAS = "123"
KEY_PASSWORD = "123"
rein360ForceDirPath = "${rootProject.rootDir}/jiagu"
rein360ForceJarPath = "${rein360ForceDirPath}/jiagu.jar"
account360 = "360加固保账号"
psw360 = "360加固保密码"
// 这里是多节点 看是否需要多渠道
mulpkgPath = "${rein360ForceDirPath}/多渠道模板.txt"
/**
* 找出release文件app build 文件夹中
* 只能匹配出 以apk结尾 并且包含release字符串的apk文件
*/
findReleaseApkPath = { String data ->
// def appBuildOutPut = new File("${project.rootDir}/app/package/access/release")
def appBuildOutPut = new File(packageSources + "/" + data + "/release")
def apkFile = null
appBuildOutPut.eachFile {
if (it.name.endsWith(".apk") /*&& it.name.contains("release")*/) {
println(it)
apkFile = it
}
}
return apkFile
}
//找出各个节点
findApkFiles = {
List<String> app = new ArrayList<>();
File apkDir = new File(packageSources)
File[] channelDirs = apkDir.listFiles()
for (int i = 0; i < channelDirs.length; i++) {
File channelDir = channelDirs[i]
app.add( channelDir.name)
}
return app;
}
/**
* 通过调用360的命令行加固并且多渠道打包
* apk -> 原有release包的文件
* outputPath -> 多渠道打包后文件输出路径
*/
reinForceApk = { File apk, File outPutPath ->
println(outPutPath)
if (apk == null || !apk.exists()) {
println("没有找到apk文件")
throw new FileNotFoundException("没有找到APK文件")
}
if (!outPutPath.exists()) {
outPutPath.mkdirs()
}
//登录
"java -jar ${rein360ForceJarPath} -login ${account360} ${psw360}".execute().waitForProcessOutput(System.out, System.err)
//多渠道 这里不需要
// "java -jar ${rein360ForceJarPath} -importmulpkg ${mulpkgPath}".execute().waitForProcessOutput(System.out, System.err)
//签名信息
"java -jar ${rein360ForceJarPath} –importsign ${keyStorePath} ${KEYSTORE_PASSWORD} ${KEY_ALIAS} ${KEY_PASSWORD}".execute().waitForProcessOutput(System.out, System.err)
"java -jar ${rein360ForceJarPath} -config -analyse".execute().waitForProcessOutput(System.out, System.err)
// "java -jar ${rein360ForceJarPath} -jiagu ${apk.path} ${outPutPath.path} -autosign -automulpkg".execute().waitForProcessOutput(System.out, System.err)
//只签名,不需要多渠道
"java -jar ${rein360ForceJarPath} -jiagu ${apk.path} ${outPutPath.path} -autosign".execute().waitForProcessOutput(System.out, System.err)
}
}
3,调用
app的build 中
apply from: "../automation_reinforcement.gradle"
//具体任务类型
task assembleReinForceRelease() {
group 'multipleChannels'
dependsOn('assembleRelease')
//获取各个节点的名称
List<String> string = findApkFiles();
//具体任务
doLast {
for (int i = 0; i < string.size(); i++) {
def apk = findReleaseApkPath(string.get(i))
def outputFile = new File(jiagu_packageSources)
reinForceApk(apk, outputFile)
}
}
}
命令运行:gradlew assembleReinForceRelease
更多推荐
多节点打包+360自动加固
发布评论