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

内容分享4天前发布
1 0 0
脚本链接:https://gitee.com/guliangbiezou/script-project
瓦力项目链接:https://github.com/itang01/walle

一、在项目目录下创建buildSrc目录,并将buildEncrypt目录拷贝到该目录下,脚本中对buildEncrypt目录下的文件的定位路径为相对路径,随意移动会导致找不到相应目录,若要移动请自行修改脚本,查看打印目录信息可执行printProduceAndConfigPath任务,导入脚本后sync之后可见

sdkBuildPath :E:AndroidSdkSdkuild-tools29.0.2
userName360 :你的360账号
password360 :你的360密码
keyStoreFilePath :E:NewLifeFluterDemoScriptProjectuildSrcuildEncryptkey.jks
keyStorePassword :abc123
keyStoreAlias :key0
keyStoreAliasPassword :abc123
scriptParentPath(脚本所在目录) :E:NewLifeFluterDemoScriptProjectuildSrcuildEncrypt
originAssembleApkPath(原始release包目录) :E:NewLifeFluterDemoScriptProjectappuildoutputsapk
elease
正确目录结构(脚本中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生成

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

六、在local.properties文件中配置相关属性,注意别带引号

//必须配置  
userName360=你的360账号
password360=你的360密码
//必须配置
//密钥路径
keyStoreFilePath=E:\NewLife\FluterDemo\ScriptProject\buildSrc\buildEncrypt\key.jks
//密钥密码
keyStorePassword=abc123
//密钥别名
keyStoreAlias=key0
//别名密码
keyStoreAliasPassword=abc123

//可选择配置 这个是思考到Flutter项目的apk生成的文件目录和原生的不同,Flutter项目下必定要配置
//默认 跟目录项目名uildoutputsapk
elease
originAssembleApkPath=E:\NewLife\FluterDemo\ScriptProject\app\build\outputs\apk\release
//可选择配置,默认是 根目录uildSrcuildEncrypt
scriptParentPath=E:NewLifeFluterDemoScriptProjectuildSrcuildEncrypt

七、接下来就可以一键加固 打多渠道包了

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");

最后叙述一下打包流程,以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目录指的是buildSrcuildEncryptoutputs 执行命令后包生成的目录
© 版权声明

相关文章

暂无评论

none
暂无评论...