加载插件报:请注意每个插件apk构建时都需要apply plugin: 'com.tencent.shadow.plugin'
java.lang.RuntimeException: java.lang.IllegalStateException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.Error: 请注意每个插件apk构建时都需要apply plugin: 'com.tencent.shadow.plugin' at com.cop.ronghw.host.manager.SamplePluginManager$1.run(SamplePluginManager.java:153) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) Caused by: java.lang.IllegalStateException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.Error: 请注意每个插件apk构建时都需要apply plugin: 'com.tencent.shadow.plugin' at android.os.Parcel.createException(Parcel.java:2079) at android.os.Parcel.readException(Parcel.java:2039) at android.os.Parcel.readException(Parcel.java:1987) at com.tencent.shadow.dynamic.manager.BinderPluginLoader.loadPlugin(BinderPluginLoader.java:50) at com.cop.ronghw.host.manager.FastPluginManager.loadPlugin(FastPluginManager.java:141) at com.cop.ronghw.host.manager.SamplePluginManager$1.run(SamplePluginManager.java:138) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919)
我的插件的 AGP版本7.2.0,gradle版本7.3.3 ,我是用的是源码集成的方式
请问大佬们如何解决
插件 app/build.gradle 文件如下:
buildscript {
repositories {
if (!System.getenv().containsKey("DISABLE_TENCENT_MAVEN_MIRROR")) {
maven { url 'https://mirrors.tencent.com/nexus/repository/maven-public/' }
} else {
google()
mavenCentral()
jcenter()
}
}
//编译时使用(可以理解为在shdow构建(脚本)项目过程中需要的依赖包)
dependencies {
classpath 'com.tencent.shadow.core:runtime'
classpath 'com.tencent.shadow.core:activity-container'
classpath 'com.tencent.shadow.core:gradle-plugin'
classpath "org.javassist:javassist:$javassist_version"
}
}
plugins {
id 'com.android.application'
id 'com.tencent.shadow.plugin' //引用腾讯shadow插件
}
android {
compileSdk project.COMPILE_SDK_VERSION
defaultConfig {
applicationId "com.cop.ronghw.plugin1"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// flavorDimensions (*flavorDimensionList, 'DimensionA')
// 将插件applicationId设置为和宿主相同
productFlavors {
plugin {
applicationId project.SAMPLE_HOST_APP_APPLICATION_ID
}
}
lintOptions {
abortOnError false
}
// 将插件的资源ID分区改为和宿主0x7F不同的值
aaptOptions {
additionalParameters "--package-id", "0x7E", "--allow-reserved-package-id"
}
}
dependencies {
//注意sample-host-lib要用compileOnly编译而不打包在插件中。在packagePlugin任务中配置hostWhiteList允许插件访问宿主的类。
// pluginCompileOnly project(":sample-host-lib")
// normalImplementation project(":sample-host-lib")
//
// pluginCompileOnly project(":sample-base-lib")
// normalImplementation project(":sample-base-lib")
//Shadow Transform后业务代码会有一部分实际引用runtime中的类
//如果不以compileOnly方式依赖,会导致其他Transform或者Proguard找不到这些类
pluginCompileOnly 'com.tencent.shadow.core:runtime'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
shadow {
transform {
// useHostContext = ['abc']
}
packagePlugin {
pluginTypes {
debug {
loaderApkConfig = new Tuple2('plugin-loader-debug.apk', ':plugin-loader:assembleDebug')
runtimeApkConfig = new Tuple2('plugin-runtime-debug.apk', ':plugin-runtime:assembleDebug')
// 打包的apk
pluginApks {
pluginApk1 {
businessName = 'app-plugin'
partKey = 'app-plugin'
buildTask = ':app:assemblePluginDebug'
apkPath = 'app/build/outputs/apk/plugin/debug/app-plugin-debug.apk'
// hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
// dependsOn = ['sample-base']
}
}
}
release {
loaderApkConfig = new Tuple2('plugin-loader-release.apk', ':plugin-loader:assembleRelease')
runtimeApkConfig = new Tuple2('plugin-loader-runtime.apk', ':plugin-runtime:assembleRelease')
pluginApks {
pluginApk1 {
businessName = 'app-plugin'
partKey = 'app-plugin'
buildTask = ':app:assemblePluginRelease'
apkPath = 'app/build/outputs/apk/plugin/release/app-plugin-release.apk'
// hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
// dependsOn = ['sample-base']
}
}
}
}
loaderApkProjectPath = 'plugin-loader'
runtimeApkProjectPath = 'plugin-runtime'
archiveSuffix = System.getenv("PluginSuffix") ?: ""
archivePrefix = 'plugin'
destinationDir = "${getRootProject().getBuildDir()}"
version = 4
compactVersion = [1, 2, 3]
uuidNickName = "1.1.5"
}
}
补充:按照之前类似的issue 没有解决问题,麻烦给指导一下。搞了一天多了 也没搞出来
打包插件后会生成plugin-debug.zip 但是
反编译的class.dex 文件中没有com.tecent.shadow包 如下图:

已解决:gradle版本的问题,shadow sdk 中gradle版本和AGP版本太高导致的。 分别将这俩版本降低到了 7.0.2 和7.0.3。 对于高版本的, 希望研发人员再支持一下。
@shifujun 这个问题,我试了好几个插件,都会出现这种情况,确实不支持高版本的gradle 和AGP 。测试时,我插件的gradle 版本是7.3.3 AGP是7.20 。大佬这个怎么改