首页 » Android » 正文

android打包和分渠道

一、android studio内置

  1. build -> Generated signed bundle/apk

    image-20191118100312960

  2. 选择bundle或者直接的apk,区别有说明,一般是使用第二个。

    image-20191118100421875

  3. 填写签名文件的路径和密码信息。

    image-20191118100904618

  4. 填完之后是选择debug和release的包,这里我是配置了productFlavors,所以有对应的分别的debug包和release包。

    image-20191118101020372

二、瓦力打包

  1. classpath 'com.meituan.android.walle:plugin:1.1.6'在项目的build.gradle加入插件的依赖。

  2. apply插件并且在module中添加依赖。

    apply plugin: 'walle'
    dependencies {
       compile 'com.meituan.android.walle:library:1.1.6'
    }
    
  3. 插件的配置,配置处于build.gradle的最外层。

    官方的标准配置说明

    walle {
       // 指定渠道包的输出路径
       apkOutputFolder = new File("${project.buildDir}/outputs/channels");
       // 定制渠道包的APK的文件名称
       apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
       // 渠道配置文件
       channelFile = new File("${project.getProjectDir()}/channel")
    }
    

    我使用的配置

    walle {
       // 指定渠道包的输出路径
       apkOutputFolder = new File("${project.buildDir}/outputs/channels")
       // 定制渠道包的APK的文件名称
       apkFileNameFormat = 'app名_${versionName}_${channel}.apk'
       // 渠道配置文件
    //    channelFile = new File("${project.getProjectDir()}/channel.txt")
       // 渠道&额外信息配置文件,与channelFile互斥
       configFile = new File("${project.getProjectDir()}/config.json")
    }
    

    其中channelFile 和 configFile是互斥的,推荐使用configFile的方式,channelFile只能知道哪个渠道,不能带更多的信息。

    1. channel.txt文件的配置格式是,可以通过#来注释

      image-20191118102940503

    ​ 在代码中通过String channel = WalleChannelReader.getChannel(this.getApplicationContext());得到对应的渠道。

    1. config.json的格式是,

      image-20191118103224934

      对应的信息获取方式是

      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");
      
    2. 打包命令./gradlew clean assembleReleaseChannels -PchannelList=meituan 从命令的List可以看出,一条命令可以打多个渠道的包,只需要将不同的渠道在后面以逗号分隔即可,打debug包只需要将Release改成Debug即可,非常的方便。

    三、productFlavors

    瓦力打包可以在代码中得到不同的渠道信息,但是配置不了build.gradle的信息,在不同的条件下,我们可能需要不同的配置,这个时候就需要productFlavors。

    productFlavors {
           cooperatorA {
               applicationId 
               manifestPlaceholders = 
               versionCode 1
               versionName "1.0"
               dimension 
           }
           cooperatorB {
               applicationId 
               manifestPlaceholders
               versionCode 2
               versionName "1.0.1"
               dimension "cooperator"
           }
       }
    

    其中每个渠道的配置会覆盖defaultConfig的配置内容,生成对应的不同的配置apk,其中有个重要的内容是维度的概念(dimension),可以参考这篇博客,而瓦力打包和product也可以混用进行打包。

发表评论