Walle(瓦力)多渠道打包-gradle脚本-可360加固一键打包

脚本链接: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 extraInfo = channelInfo.getExtraInfo();
}
// 或者也可以直接根据key获取
String value = WalleChannelReader.get(context, "buildtime");
最后叙述一下打包流程,以buildEncryptChannels为例:
1、删除assembleRelease生成的文件夹 (app/build/apk/release)
2、构建新的release包 (执行assembleRelease)
3、将包上传到360加固,加固后生成未签名的包到outputs/unsign目录下
4、对未签名的包进行对齐,生成对齐包到outputs/unSignZip目录下
5、对对齐的包进行V2二次签名,生成二次签名包到outputs/reSign目录下
6、对二次签名的包进行渠道分包生成到 outputs/channels目录下
以上为一般打包流程。其他命令,各位可按照各自需求分别使用。only开头的命令需要前置条件,如onlyResignV2对应第5步(仅对未签名的包进行再次签名)其前置条件即outputs/unsign目录下需要有一个未签名的包。其他命令同样按照上面步骤找前置条件即可。 如想打多渠道包不加固,将使用V2签名的包放到outputs/reSign目录下然后执行onlyZMakeChannels即可,记得别忘了配置相应的渠道配置文件。这里的outputs目录指的是buildSrc\buildEncrypt\outputs 执行命令后包生成的目录

你可能感兴趣的:(Walle(瓦力)多渠道打包-gradle脚本-可360加固一键打包)