zoukankan      html  css  js  c++  java
  • 多聚道打包

    根据公司业务要求,需要在将App上架到各大应用市场,并进行统计不同聚道用户数等。我们一般集成友盟统计来实现该方式。

    android原始打包方式配置。(已在AndroidManifest.xml文件中配置聚道id和聚道name)

     productFlavors {
            xiaomi {}
            baidu {}
            huawei {}
            _360 {}
        }
    
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    
        android.applicationVariants.all {
            variant ->
            variant.outputs.all {
                output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    // 输出apk名称为mvvmtest_v1.0._360.apk
                    def fileName = "mvvmtest_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
                    outputFileName = new File("../release/", fileName)
                }
            }
        }

    该方式打包需要一个个点击打包,并且系统原因会使得打包异常慢,当有非常多的聚道包要打时,这样就非常繁琐了。

    为了便于快速打多个聚道包,使用腾讯的VasDolly配置完成打包。

    配置VasDolly步骤:

    1.添加依赖。

    可参考官方文档配置:https://github.com/Tencent/VasDolly

    2.配置聚道列表。

    1.在gradle.properties中添加如下配置。

    channel_file=channel.txt

    2.在项目根目录新建channel.txt文件,添加配置聚道。

    3.通过Gradle生成多聚道包。

    1.直接编译生成多聚道包

    //命令行操作打包,gradlew channelDebug、gradlew channelRelease
        channel{
            //指定渠道文件
            channelFile = new File(project.rootDir, "channel.txt")
            //多渠道包的输出目录,默认为new File(project.buildDir,"channel")
            baseOutputDir = new File(project.rootProject.buildDir,"channel")
            //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}
            apkNameFormat ='${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}'
            //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)
            isFastMode = false
            //buildTime的时间格式,默认格式:yyyyMMdd-HHmmss
            buildTimeDateFormat = 'yyyyMMdd-HH:mm:ss'
            //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式
            lowMemory = false
        }

    生成后所在目录如下。

    通过上述方式生成的包大概时长27s,但是该方式生成的包进行360加固后,聚道名称会丢失。因此推荐使用方式二,生成基准包并加固后重新生成多聚道包。 

    2.根据已有基础包重新生成多渠道包。

    rebuildChannel {
            //命令操作打包 gradlew rebuildChannel
            //指定渠道文件
            channelFile = new File(project.rootDir, "channel.txt")
            //存在的基础包路径
    //        baseDebugApk = 已有Debug APK
    //        baseReleaseApk = 已有Release APK
            baseReleaseApk = new File(project.buildDir, "app-release_10_jiagu_sign.apk")
            //默认为new File(project.buildDir, "rebuildChannel/debug")
            debugOutputDir = new File(project.buildDir, "rebuildChannel/debug")
            //默认为new File(project.buildDir, "rebuildChannel/release")
            releaseOutputDir =new File(project.buildDir, "rebuildChannel/release")
            //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)
            isFastMode = false
            //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式
            lowMemory = false
        }

    生成后所在目录如下。

    最后编译时长大约4s。

    4.读取聚道信息。

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

    可通过该方式读取聚道信息,这样可在Application中动态获取聚道名称并设置聚道ID。

    参考链接:

     1.https://www.cnblogs.com/tangs/articles/11251090.html 

     2.https://blog.csdn.net/qq_35070105/article/details/80334758

       

  • 相关阅读:
    三剑客之Grep家族
    Linux默认权限命令:umask
    Linux特殊权限管理SUID|SGID|STICKY
    zabbix的web界面出现乱码解决方案
    启动zabbix-server/agent报错:cannot open "/etc/zabbix/logs/zabbix_server.log": [13] Permission denied
    Zabbix-Agent配置文件详解
    使用yum安装报错:[Errno 256] No more mirrors to try
    grep/sed/awk命令查看指定时间段的日志
    数据库SQL练习(一):数据查询
    连接数据库报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  • 原文地址:https://www.cnblogs.com/fangg/p/11265607.html
Copyright © 2011-2022 走看看