android开发 Gradle多渠道打包以及集成360加固

   日期:2020-08-28     浏览:105    评论:0    
核心提示:先上图先说实现的目的 主要是 用脚本做渠道打包 然后在APP里面添加数据 在启动时读取数据上传服务器做统计然后为啥要这么做: 第一个是因为APP里面在做渠道包的时候 需要加特定的东西,区别这些APP, 第二个是因为360加固 包名一样,只能加固一个 不能同时加固多个,用工具打包多个,很麻烦实现步骤:1、设置渠道包的信息在build.gradle里面添加代码android {、、、 //设置渠道包信息: A1 你自己设置的标识,在每个渠道包里面的dimen

先上图


先说实现的目的 主要是 用脚本做渠道打包 然后在APP里面添加数据  在启动时读取数据上传服务器做统计
然后为啥要这么做:
	    第一个是因为APP里面在做渠道包的时候  需要加特定的东西,区别这些APP,
	    第二个是因为360加固 包名一样,只能加固一个  不能同时加固多个,用工具打包多个,很麻烦

实现步骤:
1、设置渠道包的信息
在build.gradle里面添加代码


android {
、、、

 //设置渠道包信息: A1 你自己设置的标识,在每个渠道包里面的dimension 字段 都要是这个
    flavorDimensions "A1" 
    productFlavors {
        earthHouse0 {
            versionName "aaa0"  //自己自定义名称
            dimension "A1 "
            //设置独立的参数,在activity取出,根据自己的需要设置自己想要的类型,我这里设置的是int 
            buildConfigField("int", "CURRENTENVIRONMENT", "0") 
        }
        earthHouse1 {
            versionName "aaa1"
            dimension "A1 "
            buildConfigField("int", "CURRENTENVIRONMENT", "1")
        }
    }

    productFlavors.all { flavor ->
        manifestPlaceholders.put("UMENG_CHANNEL_VALUE", name)
    }

    //Gradle升级了3.0后,output.outputFile变成了只读属性,不能再往里面写东西了,以下是3.0之前的配置:
// applicationVariants.all { variant -> //批量修改Apk名字
// variant.outputs.each { output ->
// def outputFile = output.outputFile
// if (outputFile != null && outputFile.name.endsWith('.apk') && 'release'.equals(variant.buildType.name)) {
// def fileName = outputFile.name.replace("${variant.flavorName}", "V${defaultConfig.versionName}-${variant.flavorName}")
// fileName = fileName.replace('.apk', "-${buildTime()}.apk")
// output.outputFile = new File(outputFile.parent, fileName)
// }
// }
// }
    //下面是经过修改之后3.0里面批量修改APK名字的配置:
    applicationVariants.all { variant ->    //批量修改Apk名字
        variant.outputs.all { output ->
            if (!variant.buildType.isDebuggable()) {
                //获取签名的名字 variant.signingConfig.name
                //要被替换的源字符串
                def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
                //替换的字符串
                def replaceFile = "_${variant.versionName}_${buildTime()}"
                outputFileName = output.outputFile.name.replace(sourceFile, replaceFile);
                //设置输出渠道包的路径
                variant.getPackageApplication().outputDirectory = new File("F:\\apk")
            }
        }
    }
、、、
}



渠道包的代码就完了,读取自定义的参数,在Activity中得到值就行了

2、配置加固信息,记得下载360加固保的程序


在Build.gradle里面添加参数:
ext和 buildscript,allprojects是同一级别的

ext {
	jiaGuPluginPath = 'xxxxxxx'          // 加固保安装的路径
    storeFile = file('xxxxxx')           // 签名文件位置
    storePassword = 'xxxx'               // 密码
    keyAlias = 'xxx'                     // 别名
    keyPassword = 'xxx'                  // 密码
    jiaGuUserName = 'xxx'                // 360加固保用户名
    jiaGuPwd = 'xxxx'                    // 360加固保登录密码
}

3、添加加固代码

在build.gradle里面添加代码


android {
、、、
    //加入360加固任务Task
    task reinforceAppTask(dependsOn: 'assembleRelease') {
        group "jiaGuApk"
        doLast {

            def currFile = new File(".")
            //生成的apk的路径
            def appFilePath = "F:\\apk"
            
            File apkDir = new File(appFilePath)
            File[] channelDirs = apkDir.listFiles()
            for (int i = 0; i < channelDirs.length; i++) {
            
                File lastFile = channelDirs[i]
                println "channelDir 的值:" + lastFile.toString()
                if (!lastFile.name.endsWith(".apk")) {
                    continue
                }

                println "360加固 begin"
                def cmdBase = 'java -jar jiagu.jar'

                def cmdLogin = cmdBase + " -login ${rootProject.ext.jiaGuUserName} ${rootProject.ext.jiaGuPwd}"
                println "360加固 登录命令::" + cmdLogin.toString()


// println "360加固 rootProject.ext.storeFile.getCanonicalPath():" + rootProject.ext.storeFile.toString()
// println "360加固 rootProject.ext.storeFile.storePassword:" + rootProject.ext.storePassword.toString()
// println "360加固 rootProject.ext.storeFile.keyAlias:" + rootProject.ext.keyAlias.toString()
// println "360加固 rootProject.ext.storeFile.keyPassword:" + rootProject.ext.keyPassword.toString()

                //导入签名keystore信息
                def cmdImportSign = cmdBase + ' -importsign ' + rootProject.ext.storeFile.toString() + ' ' + rootProject.ext.storePassword + ' ' + rootProject.ext.keyAlias + ' ' + rootProject.ext.keyPassword

                println "360加固 导入签名keystore信息: " + cmdImportSign.toString()

// //查看当前签名keystore信息
// def cmdShowSign = cmdBase + ' -showsign'
//
// def cmdConfig = cmdBase + ' -config -x86'
// //查看当前加固增强服务配置
// def cmdShowConfig = cmdBase + ' -showconfig'
// //版本查询
// def cmdVersion = cmdBase + ' -version'

                //输出目录这里设置为当前目录
                def outPath = new File("F:\\apk\\outputs")
                //应用加固 
                def cmdJiaGu = cmdBase + ' -jiagu ' + lastFile.getPath() + ' ' + outPath.getCanonicalPath() + ' -autosign' + ' -automulpkg'

                println "360加固 应用加固命令: " + cmdImportSign.toString()

                execute360JiaGuCmd(cmdLogin)
                execute360JiaGuCmd(cmdImportSign)
                execute360JiaGuCmd(cmdJiaGu)
                println "360加固---------------------------------------------end"
            }
        }
    }

    tasks.whenTaskAdded { theTask ->
        if (theTask.name == "assembleRelease") {
            theTask.dependsOn "cleanOutputsDir"
        }
    }

    task cleanOutputsDir {
        def outputsPath = getBuildDir().getAbsolutePath() + File.separator + "outputs" + File.separator
        println "delete outputsPath=" + outputsPath
        new File(outputsPath).deleteDir()
    }
、、、
}


def execute360JiaGuCmd(cmd) {
    def p = cmd.execute(null, new File(rootProject.ext.jiaGuPluginPath))
    println "execute360JiaGuCmd执行CMD命令:" + p.text
    p.waitFor()  // 用以等待外部进程调用结束

    println "execute360JiaGuCmd执行CMD 命令:" + p.exitValue()
}

上面就是所有的代码了, 注意execute360JiaGuCmd方法 和android是同级的,在代码编写完成之后
点击 Sync Now 重新编译一次,就可以在android studio看到执行的程序了

双击运行 就可以看到最上面的效果图了

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服