admin管理员组

文章数量:1635374

多节点: 打包 + 加固

前言: 节省非开发时间,便于多节点 出包 + 加固

一,多节点打包:

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

本文标签: 节点