美文网首页
Android多渠道打包

Android多渠道打包

作者: JoyoDuan | 来源:发表于2020-11-10 19:05 被阅读0次

几种打包方式

  • Android Studio
  • 美团 Walle(瓦力)
  • 友盟 UMeng

ps: 本文目前介绍Android Studio用法,友盟类似,美团待完善

Android Studio用法

  1. 在AndroidManifest.xml -> manifest -> application中添加内容:
<meta-data
        android:name="JOYO_CHANNEL"
        android:value="${JOYO_CHANNEL}" />

2.在app -> build.gradle -> android中添加内容:

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            // 配置AndroidManifest.xml中的占位值
//            manifestPlaceholders = [JOYO_CHANNEL: 'release']
        }
        debug {
            // 配置AndroidManifest.xml中的占位值
//            manifestPlaceholders = [JOYO_CHANNEL: 'debug']
        }
    }

    build {
        defaultConfig {
            // Gradle后如果出现报错,需要配置flavor dimension的维度是该版本号,这样维度就是都是统一的了
            // Error: All flavors must now belong to a named flavor dimension. Learn more at ...
            flavorDimensions "versionCode"
        }
        // 各个渠道
        productFlavors {
            huawei {}
            meizu {}
            xiaomi {}
            oppo {}
            vivo {}
            douyin {}
            yingyongbao {}
            baidu {}
        }
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [JOYO_CHANNEL: name]
        }

        // 设置输出APK名称
        // Android Studio 2.3版本
//        applicationVariants.all { variant ->
//            variant.outputs.each { output ->
//                def outputFile = output.outputFile
//                if (outputFile != null && outputFile.name.endsWith('.apk')) {
//                    def fileName = "app_${variant.productFlavors[0].name}_v${defaultConfig.versionName}.apk"
//                    output.outputFile = new File(outputFile.parent, fileName)
//                }
//            }
//        }

        // 设置输出APK名称
        // Android Studio 3.0版本
        applicationVariants.all { variant ->
            variant.outputs.all {
                def channelName = variant.productFlavors[0].name
                // 自定义路径,Android Studio会默认在app目录下生成各渠道文件夹
//                variant.getPackageApplicationProvider().get().outputDirectory = new File("${project.projectDir.absolutePath}/build/outputs/apk/${channelName}/${variant.buildType.name}")
                outputFileName = "app-${channelName}-v${variant.versionName}.apk"
            }
        }
    }

如图:

build.gradle.png
  1. 编译打包
    Build -> Generate Signed Bundle / APK -> 选择Release或Debug
图片.png

获取渠道信息

  • Android Studio
    通过读取AndroidManifest中<meta-data>标签
private String getChannel() {
    try {   
      PackageManager pm = getPackageManager();   
      ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);  
        // key为<meta-data>标签中的name
      String channel = appInfo.metaData.getString(key);     
      if (!TextUtils.isEmpty(channel)) {           
         return channel;
      }
  } catch (Exception e) {   
      e.printStackTrace();
  }
  return null;
}

相关文章

网友评论

      本文标题:Android多渠道打包

      本文链接:https://www.haomeiwen.com/subject/yegjbktx.html