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

       

  • 相关阅读:
    opencv 图片像素x,y 访问!!!
    python numpy 三维数组 排序问题
    python+opencv水表识别
    tesseractOCR安装
    cookie 的寻找和使用以及页面滚动(python+selenium)
    你还在用a标签吗?——用button替代a
    js正则高级函数(replace,matchAll用法),实现正则替换(实测很有效)
    腾讯云服务器centos7.2+nginx(开启gzip压缩)+uwsgi+Django+react
    轮播图采用js、jquery实现无缝滚动和非无缝滚动的四种案例实现,兼容ie低版本浏览器
    webstorm 添加css前缀(兼容)自动添加
  • 原文地址:https://www.cnblogs.com/fangg/p/11265607.html
Copyright © 2011-2022 走看看