Hi,
I’m trying to develop a Gradle plugin for Android that injects pieces of code to various places in the application source code. I have a particular application that gives me the following exception:
09-23 12:39:38.187 8233 8233 D AndroidRuntime: Shutting down VM
09-23 12:39:38.188 8233 8233 E AndroidRuntime: FATAL EXCEPTION: main
09-23 12:39:38.188 8233 8233 E AndroidRuntime: Process: com.sampleapp.test, PID: 8233
09-23 12:39:38.188 8233 8233 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/gradle/internal/classpath/Instrumented;
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.internal.JavaVersion.determineMajorJavaVersion(JavaVersion.java:29)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.internal.JavaVersion.<clinit>(JavaVersion.java:26)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.internal.JavaVersion.getMajorJavaVersion(JavaVersion.java:81)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.internal.reflect.ReflectionAccessor.<clinit>(ReflectionAccessor.java:36)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.internal.reflect.ReflectionAccessor.getInstance(ReflectionAccessor.java:52)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.internal.ConstructorConstructor.<init>(ConstructorConstructor.java:51)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.Gson.<init>(Gson.java:206)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.google.gson.GsonBuilder.create(GsonBuilder.java:597)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.util.GsonUtil.createGson(GsonUtil.java:51)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.interceptor.ConfirmationInterceptor.<init>(ConfirmationInterceptor.java:32)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.interceptor.ConfirmationInterceptor.create(ConfirmationInterceptor.java:39)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.util.NetworkUtil.addInterceptors(NetworkUtil.java:156)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.util.NetworkUtil.createNewOkHttpClientBuilder(NetworkUtil.java:128)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.util.NetworkUtil.getOkHttpClientBuilder(NetworkUtil.java:120)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.util.NetworkUtil.getNonPinningRetrofit(NetworkUtil.java:91)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.common.network.util.NetworkUtil.getRetrofit(NetworkUtil.java:83)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.sampleapp.test.TestApplication.onCreate(TestApplication.java:106)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1189)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6460)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:219)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.os.Looper.loop(Looper.java:214)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7356)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "org.gradle.internal.classpath.Instrumented" on path: DexPathList[[zip file "/data/app/com.sampleapp.test-HnX9HxaEHCaVMBqlz2Ja8Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.sampleapp.test-HnX9HxaEHCaVMBqlz2Ja8Q==/lib/arm64, /data/app/com.sampleapp.test-HnX9HxaEHCaVMBqlz2Ja8Q==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
09-23 12:39:38.188 8233 8233 E AndroidRuntime: ... 27 more
My build.gradle.kts
file is as follows:
plugins {
`java-gradle-plugin`
`maven-publish`
`kotlin-dsl`
}
group = "com.sampleapp.test.plugin"
version = "1.0.0-SNAPSHOT"
gradlePlugin {
plugins.create("TestPlugin") {
id = "sampleapp.plugin.test"
implementationClass = "com.sampleapp.test.plugin.TestPlugin"
}
}
repositories {
mavenCentral()
google()
maven(url = "https://plugins.gradle.org/m2/")
}
publishing {
publications {
create<MavenPublication>("maven") {
artifactId = "testplugin"
from(components["kotlin"])
}
}
}
dependencies {
implementation(kotlin(module ="stdlib", version = "1.3.72"))
implementation(group = "com.android.tools.build", name = "gradle", version = "4.2.2")
implementation(group = "org.javassist", name = "javassist", version = "3.28.0-GA")
implementation(group = "commons-io", name = "commons-io", version = "2.11.0")
implementation(group = "com.google.code.gson", name = "gson", version = "2.8.8")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}
As I understand it, gradle doesn’t append the necessary classes classpath into the dex path list. What can I do at this point?