feat:调整多渠道方式(换gradle默认方式)

This commit is contained in:
Max
2024-01-09 15:33:37 +08:00
parent a10471d1c2
commit 3ac10340d6
8 changed files with 143 additions and 53 deletions

View File

@@ -3,12 +3,9 @@ apply plugin: 'com.android.application'
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'com.huawei.agconnect' apply plugin: 'com.huawei.agconnect'
apply plugin: 'com.tencent.vasdolly'
apply from: '../mob.gradle' apply from: '../mob.gradle'
apply plugin: 'android-junk-code' apply plugin: 'android-junk-code'
def onlyArm64 = Boolean.parseBoolean(only_arm64)
android { android {
compileSdkVersion COMPILE_SDK_VERSION.toInteger() compileSdkVersion COMPILE_SDK_VERSION.toInteger()
@@ -21,20 +18,20 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
ndk { // ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
} // }
flavorDimensions 'default' flavorDimensions 'default'
} }
splits { // splits {
abi { // abi {
enable true // enable true
reset() // reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86' // include 'armeabi-v7a', 'arm64-v8a', 'x86'
universalApk true // universalApk true
} // }
} // }
//在apk文件后边生成版本号信息 //在apk文件后边生成版本号信息
android.applicationVariants.configureEach { variant -> android.applicationVariants.configureEach { variant ->
@@ -50,7 +47,7 @@ android {
if (abi == null) { if (abi == null) {
abi = "universal" abi = "universal"
} }
outputFileName = "yinmeng_${buildType.name}_v${defaultConfig.versionName}_${abi}_${date}.apk" outputFileName = "yinmeng_${variant.flavorName}_${buildType.name}_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${abi}_${date}.apk"
} }
} }
@@ -182,6 +179,54 @@ android {
buildToolsVersion = '30.0.3' buildToolsVersion = '30.0.3'
productFlavors {
official {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
mlq {
ndk {
abiFilters 'x86'
}
}
yingyongbao {
ndk {
abiFilters 'armeabi-v7a'
}
}
vivo {
ndk {
abiFilters 'arm64-v8a'
}
}
oppo {
ndk {
abiFilters 'arm64-v8a'
}
}
xiaomi {
ndk {
abiFilters 'arm64-v8a'
}
}
huawei {
ndk {
abiFilters 'arm64-v8a'
}
}
kuaishou_01 {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [
// 渠道
CHANNEL_VALUE : name,
]
}
} }
@@ -258,7 +303,7 @@ dependencies {
//oppo推送需要 //oppo推送需要
implementation 'commons-codec:commons-codec:1.6' implementation 'commons-codec:commons-codec:1.6'
api 'com.tencent.vasdolly:helper:3.0.3' // api 'com.tencent.vasdolly:helper:3.0.3'
implementation "io.github.tencent:vap:2.0.24" implementation "io.github.tencent:vap:2.0.24"
implementation 'com.github.mmin18:realtimeblurview:1.2.1' implementation 'com.github.mmin18:realtimeblurview:1.2.1'
@@ -276,36 +321,20 @@ repositories {
} }
channel {
//多渠道包的输出目录默认为new File(project.buildDir,"channel")
outputDir = new File(project.buildDir, "channelapk")
//多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime}
def only64 = onlyArm64 ? "-only64" : ""
apkNameFormat = 'yinmeng-${buildType}only64-${flavorName}-v${versionName}-${buildTime}'.replace("only64", only64)
//快速模式生成渠道包时不进行校验速度可以提升10倍以上默认为false
fastMode = false
//buildTime的时间格式默认格式yyyyMMdd-HHmmss
buildTimeDateFormat = 'MMddHHmm'
//低内存模式仅针对V2签名默认为false只把签名块、中央目录和EOCD读取到内存不把最大头的内容块读取到内存在手机上合成APK时可以使用该模式
lowMemory = false
}
android.applicationVariants.all { variant -> android.applicationVariants.all { variant ->
print("variant.name=" + variant.name) print("variant.name=" + variant.name)
switch (variant.name) {//变体名称如果没有设置productFlavors就是buildType名称如果有设置productFlavors就是flavor+buildType例如freeRelease、proRelease if (variant.name.contains("release") || variant.name.contains("Release")) {
case "release": androidJunkCode.configMap.put(variant.name, {
androidJunkCode.configMap.put(variant.name, { packageBase = "com.nnbc123.plugin.ui" //生成java类根包名
packageBase = "com.nnbc123.plugin.ui" //生成java类根包名 packageCount = 30 //生成包数量
packageCount = 30 //生成包数量 activityCountPerPackage = 30 //每个包下生成Activity类数量
activityCountPerPackage = 30 //每个包下生成Activity类数量 excludeActivityJavaFile = false
excludeActivityJavaFile = false //是否排除生成ActivityJava文件,默认false(layout和写入AndroidManifest.xml还会执行),主要用于处理类似神策全埋点编译过慢问题
//是否排除生成Activity的Java文件,默认false(layout和写入AndroidManifest.xml还会执行),主要用于处理类似神策全埋点编译过慢问题 otherCountPerPackage = 50 //每个包下生成其它类的数量
otherCountPerPackage = 50 //每个下生成其它类的数量 methodCountPerClass = 20 //每个下生成方法数量
methodCountPerClass = 20 //每个类下生成方法数量 resPrefix = "mango_" //生成的layout、drawable、string等资源名前缀
resPrefix = "mango_" //生成的layout、drawable、string等资源名前缀 drawableCount = 300 //生成drawable资源数量
drawableCount = 300 //生成drawable资源数量 stringCount = 300 //生成string数量
stringCount = 300 //生成string数量 })
})
break
} }
} }

View File

@@ -86,6 +86,10 @@
android:theme="@style/MyMaterialTheme" android:theme="@style/MyMaterialTheme"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
tools:replace="android:name,android:allowBackup"> tools:replace="android:name,android:allowBackup">
<!-- 多渠道 -->
<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />
<!-- 刘海屏适配 begin --> <!-- 刘海屏适配 begin -->
<!-- 小米 --> <!-- 小米 -->
<meta-data <meta-data

View File

@@ -28,6 +28,7 @@ import androidx.multidex.MultiDex;
import com.bumptech.glide.request.target.ViewTarget; import com.bumptech.glide.request.target.ViewTarget;
import com.bytedance.hume.readapk.HumeSDK; import com.bytedance.hume.readapk.HumeSDK;
import com.chuhai.utils.MetaDataUtils;
import com.coorchice.library.utils.LogUtils; import com.coorchice.library.utils.LogUtils;
import com.facebook.stetho.Stetho; import com.facebook.stetho.Stetho;
import com.heytap.msp.push.HeytapPushManager; import com.heytap.msp.push.HeytapPushManager;
@@ -61,7 +62,6 @@ import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.tencent.bugly.Bugly; import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta; import com.tencent.bugly.beta.Beta;
import com.tencent.bugly.crashreport.CrashReport; import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.vasdolly.helper.ChannelReaderUtil;
import com.umeng.analytics.MobclickAgent; import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure; import com.umeng.commonsdk.UMConfigure;
import com.nnbc123.app.BuildConfig; import com.nnbc123.app.BuildConfig;
@@ -213,12 +213,12 @@ public class XChatApplication extends BaseApp {
// 初始化 sp // 初始化 sp
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
String channel = ""; String channel;
channel = ChannelReaderUtil.getChannel(instance); channel = MetaDataUtils.INSTANCE.getStringData(Constants.CHANNEL_KEY, application);
if (TextUtils.isEmpty(channel)) { if (TextUtils.isEmpty(channel)) {
channel = "official"; channel = "official";
} }
Log.d("XChatApplication", "channel:" + channel);
BasicConfig.INSTANCE.setOriginalChannel(channel); BasicConfig.INSTANCE.setOriginalChannel(channel);
//头条分包渠道 //头条分包渠道
@@ -228,6 +228,7 @@ public class XChatApplication extends BaseApp {
channel = byteDanceChannel; channel = byteDanceChannel;
} }
} }
Log.d("XChatApplication", "channel2:" + channel);
BasicConfig.INSTANCE.setChannel(channel); BasicConfig.INSTANCE.setChannel(channel);
initEnv(); initEnv();

View File

@@ -7,8 +7,9 @@ import android.util.Log;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.chuhai.utils.MetaDataUtils;
import com.nnbc123.core.Constants;
import com.orhanobut.logger.Logger; import com.orhanobut.logger.Logger;
import com.tencent.vasdolly.helper.ChannelReaderUtil;
import com.nnbc123.app.application.XChatApplication; import com.nnbc123.app.application.XChatApplication;
import com.nnbc123.xchat_android_constants.XChatConstants; import com.nnbc123.xchat_android_constants.XChatConstants;
import com.nnbc123.library.utils.AppUtils; import com.nnbc123.library.utils.AppUtils;
@@ -88,7 +89,7 @@ public class SimpleJSInterface {
@JavascriptInterface @JavascriptInterface
public String getChannel() { public String getChannel() {
String channel; String channel;
channel = ChannelReaderUtil.getChannel(XChatApplication.instance()); channel = MetaDataUtils.INSTANCE.getStringData(Constants.CHANNEL_KEY, XChatApplication.instance());
if (TextUtils.isEmpty(channel)) { if (TextUtils.isEmpty(channel)) {
channel = "official"; channel = "official";
} }

View File

@@ -25,7 +25,7 @@ buildscript {
// android 资源混淆插件 // android 资源混淆插件
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.huawei.agconnect:agcp:1.6.0.300' classpath 'com.huawei.agconnect:agcp:1.6.0.300'
classpath 'com.tencent.vasdolly:plugin:3.0.3' // classpath 'com.tencent.vasdolly:plugin:3.0.3'
classpath "com.mob.sdk:MobSDK:2018.0319.1724" classpath "com.mob.sdk:MobSDK:2018.0319.1724"
classpath "com.github.qq549631030:android-junk-code:1.0.7" classpath "com.github.qq549631030:android-junk-code:1.0.7"
} }

View File

@@ -13,6 +13,7 @@ import java.util.List;
* Created by Administrator on 2017/11/9. * Created by Administrator on 2017/11/9.
*/ */
public class Constants { public class Constants {
public static final String CHANNEL_KEY = "CHANNEL";
public static final String ERBAN_DIR_NAME = XChatConstants.XCHAT_DIR_NAME; public static final String ERBAN_DIR_NAME = XChatConstants.XCHAT_DIR_NAME;
public static final String nimAppKey = Env.isDebug() ? public static final String nimAppKey = Env.isDebug() ?
XChatConstants.NIM_KEY_DEBUG : XChatConstants.NIM_KEY_RELEASE; XChatConstants.NIM_KEY_DEBUG : XChatConstants.NIM_KEY_RELEASE;

View File

@@ -23,7 +23,6 @@ with_flutter_aar=true
with_jenkins=false with_jenkins=false
only_arm64=false only_arm64=false
channel_file=channel.txt
COMPILE_SDK_VERSION=32 COMPILE_SDK_VERSION=32
MIN_SDK_VERSION=21 MIN_SDK_VERSION=21

View File

@@ -0,0 +1,55 @@
package com.chuhai.utils
import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import android.text.TextUtils
/**
* MetaData工具
* @author Max
* @date 2019-11-26.
*/
object MetaDataUtils {
/**
* 获取元数据
* @param context 上下文
*/
fun getMetaData(context: Context? = AppUtils.getApp()): Bundle? {
if (context == null) {
return null
}
try {
val packageManager = context.packageManager ?: return null
val applicationInfo = packageManager.getApplicationInfo(
context.packageName,
PackageManager.GET_META_DATA
)
return applicationInfo.metaData
} catch (e: Exception) {
e.printStackTrace()
return null
}
}
/**
* 获取布尔值
*/
fun getBooleanData(key: String, context: Context? = AppUtils.getApp()): Boolean? {
return getMetaData(context)?.getBoolean(key)
}
/**
* 获取字符串
*/
fun getStringData(key: String, context: Context? = AppUtils.getApp()): String? {
return getMetaData(context)?.getString(key)
}
/**
* 获取Int
*/
fun getIntData(key: String, context: Context? = AppUtils.getApp()): Int? {
return getMetaData(context)?.getInt(key)
}
}