脚本链接:https://gitee.com/guliangbiezou/script-project
瓦力项目链接:https://github.com/itang01/walle
一、在项目目录下创建buildSrc目录,并将buildEncrypt目录拷贝到该目录下,脚本中对buildEncrypt目录下的文件的定位路径为相对路径,随意移动会导致找不到相应目录,若要移动请自行修改脚本,查看打印目录信息可执行printProduceAndConfigPath任务,导入脚本后sync之后可见
sdkBuildPath :E:\AndroidSdk\Sdk\build-tools\29.0.2
userName360 :你的360账号
password360 :你的360密码
keyStoreFilePath :E:\NewLife\FluterDemo\ScriptProject\buildSrc\buildEncrypt\key.jks
keyStorePassword :abc123
keyStoreAlias :key0
keyStoreAliasPassword :abc123
scriptParentPath(脚本所在目录) :E:\NewLife\FluterDemo\ScriptProject\buildSrc\buildEncrypt
originAssembleApkPath(原始release包目录) :E:\NewLife\FluterDemo\ScriptProject\app\build\outputs\apk\release
正确目录结构(脚本中buildEncrypt目录下均为相对路径,请保持正确结构和文件名字):
>buildEncrypt (脚本及相关文件目录)
>channel (仅包含渠道信息文件)
>encrypt.gradle (脚本文件)
>extraChannel.json (包含渠道及额外信息文件)
>java (360java环境目录,360建议使用该包加固,否则可能出现未知问题)
>bin
>lib
>jiagu.jar (360加固jar包)
>outputs (生成apk文件总目录,该目录下文件执行脚本后生成)
>channels (生成仅包含渠道信息apk目录)
>extraChannels (生成包含渠道信息及额外信息apk目录)
>reSign (v2重签名后apk目录)
>sign360 (360加固签名后生成apk目录)
>unsign (360加固后未签名apk目录)
>unSignZip (360加固后未签名zip对齐之后的apk目录)
>walle-cli-all.jar (瓦力多渠道打包jar包)
二、导入脚本到app的build.gradle中,此处用到的是相对路径,使用者根据自己项目目录情况导入
apply from: '../buildSrc/buildEncrypt/encrypt.gradle'
三、在app主module的build.gradle下配置release打包配置,此步骤会使项目assembleRelease时使用正式签名及重命名
android {
...
signingConfigs {
release {
storeFile file("${scriptParentPath}${File.separator}key.jks")
storePassword 'abc123'
keyAlias 'key1'
keyPassword 'abc123'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release //记得配置此处
}
}
//release apk重命名 app-构建时间-git版本号-apk版本号-debug或release.apk
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def tailStr = ".apk"
if (variant.buildType.name.contains("release")) tailStr = "rel.apk"
if (variant.buildType.name.contains("debug")) tailStr = "debug.apk"
//此处由于studio升级到4.0后之前output.outputFile的方式不行后修改为这样
outputFileName = "app-${getCurrentTime()}-${getGitVersion()}-${defaultConfig.versionName.replace(".","_")}-$tailStr"
}
}
}
}
五、同步项目之后即可有如下gradle task生成
脚本导入后生成的task六、在local.properties文件中配置相关属性,注意别带引号
//必须配置
userName360=你的360账号
password360=你的360密码
//必须配置
//密钥路径
keyStoreFilePath=E\:\\NewLife\\FluterDemo\\ScriptProject\\buildSrc\\buildEncrypt\\key.jks
//密钥密码
keyStorePassword=abc123
//密钥别名
keyStoreAlias=key0
//别名密码
keyStoreAliasPassword=abc123
//可选择配置 这个是考虑到Flutter项目的apk生成的文件目录和原生的不同,Flutter项目下一定要配置
//默认 跟目录\项目名\build\outputs\apk\release
originAssembleApkPath=E\:\\NewLife\\FluterDemo\\ScriptProject\\app\\build\\outputs\\apk\\release
//可选择配置,默认是 根目录\buildSrc\buildEncrypt
scriptParentPath=E:\NewLife\FluterDemo\ScriptProject\buildSrc\buildEncrypt
七、接下来就可以一键加固 打多渠道包了
encryptchannl
buildEncryptChannels (重头开始构建加固并仅带渠道信息的渠道包)
buildEncryptExtraChannels (重头开始构建加固并带额外信息的渠道包)
buildEncryptResignV2 (重头开始构建加固后V2重签名的包)
buildEncryptSign360Apk (重头开始构建加固后,360自动签名的包)
buildEncryptUnsignApk (重头开始构建加固后未签名的包)
printProduceAndConfigPath (打印已配置目录及说明)
printTaskEffect (打印task名称及说明)
encryptchannl2
onlyEncryptUnsign (仅加固未签名的包)
onlyResignV2 (仅V2重签名加固后未签名的包)
onlyZMakeChannels (仅将V2重签名的包分多渠道,仅包含渠道信息)
onlyZMakeExtraChannels (仅将V2重签名的包分多渠道,包含渠道信息及额外信息)
八、获取渠道信息
//引入walle
implementation 'com.meituan.android.walle:library:1.1.7'
//代码中获取渠道信息
ChannelInfo channelInfo= WalleChannelReader.getChannelInfo(this.getApplicationContext());
if (channelInfo != null) {
String channel = channelInfo.getChannel();
Map<String, String> extraInfo = channelInfo.getExtraInfo();
}
// 或者也可以直接根据key获取
String value = WalleChannelReader.get(context, "buildtime");
网友评论