Не удалось найти файл класса для okhttp3.OkHttpClient с помощью ByteBuddy android.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Не удалось найти файл класса для okhttp3.OkHttpClient с помощью ByteBuddy android.

Сообщение Anonymous »

ранее я задавал здесь вопрос и получил несколько предложений от @Rafael Winterhalter. я применил эти изменения, но застрял с новой ошибкой.
этот код работает с подклассом, но я хочу автоматически заменить весь OkHttpClient на bytebuddy.
как мне к этому подойти?
вот мой код

Код: Выделить всё

    fun setupOkHttpBuilderByteBuddy(context: Context) {
val strategy = AndroidClassLoadingStrategy.Wrapping(
context.getDir("generated", Context.MODE_PRIVATE)
)

try {

val classLoader = context.classLoader ?: OkHttpClient::class.java.classLoader

val dynamicType = ByteBuddy().with(TypeValidation.DISABLED)
.redefine(OkHttpClient::class.java)
.method(ElementMatchers.named("newCall"))
.intercept(MethodDelegation.to(OkHttpInterceptor::class.java))
.make()
.load(classLoader, strategy)
.loaded

Log.d("OkHttpInterceptor", "ByteBuddy modification completed")

val instance = dynamicType.getDeclaredConstructor().newInstance()
// Log the class name to verify if it’s from the dynamically generated class
Log.d("OkHttpInterceptor", "Class name of instance: ${instance::class.java.name}")

// Check if the instance is an instance of OkHttpClient and the modified class
val isSubclass = OkHttpClient::class.java.isAssignableFrom(instance::class.java)
Log.d("OkHttpInterceptor", "Is instance a subclass of OkHttpClient? $isSubclass")

} catch (e: Exception) {
e.printStackTrace()
}

}
вот OkHttpInterceptor

Код: Выделить всё

    class OkHttpInterceptor {

companion object {
@JvmStatic
fun intercept(
@SuperCall originalCall: Callable,
@Argument(0) request: Request
): Call {
// Log or modify the request here
Log.d("OkHttpInterceptor", "Intercept method request: $request")

val client = OkHttpClient.Builder()
.addInterceptor(NetworkInterceptor())
.build()

// Call the original method with the modified request
//            return originalCall.call()
return client.newCall(request)
}
}
}
вот ошибка

Код: Выделить всё

java.lang.IllegalStateException: Could not locate class file for okhttp3.OkHttpClient
at net.bytebuddy.dynamic.ClassFileLocator$Resolution$Illegal.resolve(ClassFileLocator.java:130)
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:4034)
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2246)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter.make(DynamicType.java:4057)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3741)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3993)
at com.rnadigital.monita_android.MyApplicationKt.setupOkHttpBuilderByteBuddy(MyApplication.kt:90)
at com.rnadigital.monita_android.MyApplication.onCreate(MyApplication.kt:33)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1316)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6998)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
загружен /vendor/lib64/egl/libEGL_emulation.so

Подробнее здесь: https://stackoverflow.com/questions/791 ... dy-android
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»