美团的 Walle 计划:github.com/Meituan-Dia…

腾讯的 VasDolly 计划:github.com/Tencent/Vas…

packer-ng-plugin腾讯课堂划:github.com/mcxiaoke/pa…

先从 Github腾讯地图源保护的状况看,packer-ng-plugin测试你适合学心理学吗目现已中止保护,Walle 最新的腾讯客服保护是在2年前,VasDolly 最新的保护在5个月前。从开源保护的角度来说,腾讯的 VasDolly 计划,更胜一筹。

Android 多途径打包的计划总结

VasDolly

先说使用后的体会:

由于 VasDolly 官方最新的版本为 v3.0.4,所以直接集成最新腾讯地图版本的状况,没去试前史旧版本腾讯地图的状况。 项目环境为:

dependencies {
classpath 'com.android.tools.build:gradle:7.0.3'
classpath 'com.tencent.vasdolly:plugin:3.0.4'
}
distributionUrl=https://services.gradle.org/distributions/gradle-7.0.2-all.zip

即可成功编译,而且按教程装备,能够打出对应的途径包。官方的 Demo 给的便是这个 Gradle 编译环境。打20个途径包,时刻能够控制在1测试你适合学心理学吗分钟左右。

腾讯会议是,例如项目环境为:

dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
classpath 'com.tencent.vasdolly:plugin:3.0.4'
}
distributionUrl=https://services.gradle.org/distributions/gradle-6.6-all.zip

编译项目会报这个错:

Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'.
This is an unexpected error. Please file a bug containing the idea.log file.

VasDolly 完成原理:

g开源矿工ithub.com命令行进入指定目录/Tencent/Vas…

经过Gradle生成多途径包

若是直接编译生成多途径包,首先要装备途径文件、途径包的输出目录和途径包的命名规矩:

channel{
    //指定途径文件
    channelFile = file("/Users/leon/Downloads/testChannel.txt")
     //多途径包的输出目录,默以为new File(project.buildDir,"channel")
    outputDir = new File(project.buildDir,"xxx")
    //多途径包的命名规矩,默以为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime}
    apkNameFormat ='${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}'
    //快速方式:生成途径包时不进行校验(速度能够提高10倍以上,默以为false)
    fastMode = false
    //buildTime的时刻格局,默认格局:yyyyMMdd-HHmmss
    buildTimeDateFormat = 'yyyyMMdd-HH:mm:ss'
    //低内存方式(仅针对V2签名,默以为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上组成APK时,能够使用该方式
    lowMemory = false
}

其间,多途径包的命名规矩中,可使用以下字段:

  • appNamehttps和http的区别 : 当时project的na腾讯会议me
  • versionName测试仪 : 当时Variant的versio腾讯先锋nName
  • versionCode : 当时VHTTPSariant的versionCode
  • buildTy命令行常用命令pe : 当时Variant的buildType,即debug or release
  • flavorName : 当时的途径称号
  • appId : 当时Var命令行选项语法错误怎么办iant腾讯会议的applicationId
  • buildTime : 当时编译构建日期时刻,时刻格局能够自定义,默认格局:yyyyMMdd-HHmmss

然后,经过 gradle channelDebuggradle ch测试英文annelRelease 指令分别生成 DebugRelease 的多途径包。

腾讯体育了方便暂时生成途径包进命令行怎么打开行测试,从v2.0.0开端支持添加途径参数:测试工程师gradle ch开源阅读annelDebug(channelRelease) -Pchannels=yingyongbao,gamecenter腾讯漫画这儿经过特点 channels 指定的途径列表拥有更高的优先级,且和原始的文件方式是互斥的。

依据已有根底包从头开源代码网站github生成多途径包

若是依据已有测试抑郁程度的问卷根底包从头生成多途径包,首先要装备途径文件、根底包的路径和途径包的输出目录:

rebuildChannel {
  //指定途径文件
  channelFile = file("/Users/leon/Downloads/testReChannel.txt")
  // 已有APK文件地址(必填),如new File(project.rootDir, "/baseApk/app_base.apk"),文件名中的base将被替换为途径名
  baseApk = 已有APK文件地址(必填)
  //默以为new File(project.buildDir, "rebuildChannel")
  outputDir = 途径包输出目录
  //快速方式:生成途径包时不进行校验(速度能够提高10倍以上,默以为false)
  fastMode = false
  //低内存方式(仅针对V2签名,默以为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上组成APK时,能够使用该方式
  lowMemory = false
}

经过指令行生成途径包命令行如何切换到d盘、读取途径信开源矿工息:

github.com/Tencent/Vas…

读取途径信息

经过 helper 类库中的 Ch腾讯漫画annelReaderUtil腾讯会议 类读取途径信息腾讯会议

String channel = ChannelReaderUtil.getChannel(getApplicationContext());

假如没有途径信息,那么这儿返回 null,开发者需求自己判别。


Walle

先说使用后的体会:

Walle 官方库现已2年多没更新,命令行参数v1.开源节流是什么意思1腾讯会议.7 为最新的版本。打20个途径包,时刻也能够控制在1分钟命令行常用命令左右。 项目环境为:

dependencies {
classpath 'com.android.tools.build:gradle:4.1.3'
classpath 'com.meituan.android.walle:plugin:1.1.7'
}
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-6.6-all.zip

即可成功编译,而且按教程装备,能够打出对应的途径包。

Walle 完成原理:

tech.meituan.com/2017/01/13/…


最后总结:

  • 假如项目之前是经过 AS 手动打包的方式,在主 App 工程的 build.gradleAndroidManifest.xml 里做了一些途径包相关信息的装备。现在用了 VasDollyWalle 的计划,那么也要对自己工程里相关的代码进行更改。 例如:
  1. AndroidMa命令行进入指定目录nifest.xml 里,友盟 SDK 需求获取使用的途径称号
<meta-data
       android:name="UMENG_CHANNEL"
       android:value="${UMENG_CHANNEL_VALUE}" />
  1. 在主 App 工程的 build.gradle 中,假如写了如下代码腾讯客服
  flavorDimensions "versionCode", "serverUrl"
           applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def fileName
                    if (variant.buildType.name == "release") {
                        fileName = "XXAPP-${variant.productFlavors[0].name}-${variant.versionName}-Android.apk"
                    } else {
                        fileName = "XXAPP-Android.apk"
                    }
                    outputFileName = fileName
                }
            }
productFlavors {
        yingyongbao {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
        }
        huawei {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }
        xiaomi {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        oppo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
        }
        vivo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "vivo"]
        }
        weibo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "weibo"]
        }
        bzhan {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "bzhan"]
        }
        toutiao {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "toutiao"]
        }
        guangdiantong {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "guangdiantong"]
        }
        baidu {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        urlTest {
            dimension "serverUrl"
            buildConfigField("int", "SERVER_TYPE", "1")
        }
        urlOnline {
            dimension "serverUrl"
            buildConfigField("int", "SERVER_TYPE", "2")
        }
    }

这些途径包相关的装备,都会和 VasDolly测试仪Walle开源是什么意思 的计划有所抵触测试仪https协议所以要按照 VasDollyWalle 官方教程里的写法来写。

  • 由于 packer-ng-plugin 项目现已中止保护,V2签名计划也不支持,所以命令行常用命令没去试这个的状况。