700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android开发 Gradle多渠道打包以及集成360加固

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

时间:2024-08-28 11:50:53

相关推荐

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

先上图

先说实现的目的 主要是 用脚本做渠道打包 然后在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加固任务Tasktask 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.keyPasswordprintln "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.separatorprintln "delete outputsPath=" + outputsPathnew File(outputsPath).deleteDir()}、、、}def execute360JiaGuCmd(cmd) {def p = cmd.execute(null, new File(rootProject.ext.jiaGuPluginPath))println "execute360JiaGuCmd执行CMD命令:" + p.textp.waitFor() // 用以等待外部进程调用结束println "execute360JiaGuCmd执行CMD 命令:" + p.exitValue()}

上面就是所有的代码了, 注意execute360JiaGuCmd方法 和android是同级的,在代码编写完成之后

点击Sync Now重新编译一次,就可以在android studio看到执行的程序了

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。