ByteBuddy 如何创建另一个在 Android 中创建的 ByteBuddy 的子类?
ByteBuddy how to create a subclass of another ByteBuddy created Class in Android?
我正在为 android 编写 java 代码,使用 byte-buddy:1.10.17
和 byte-buddy-android:1.10.17
动态创建 classes。我想动态创建一个 class,它将是另一个动态创建的 class 的子 class。
这是我想做的示例代码
AndroidClassLoadingStrategy loadingStrategy = new AndroidClassLoadingStrategy.Wrapping(context.getCacheDir());
DynamicType.Builder builder = new ByteBuddy().subclass(Object.class).name("TestParentClass");
Class testParentClass = builder.make().load(Test.class.getClassLoader(), loadingStrategy).getLoaded();
builder = new ByteBuddy().subclass(testParentClass).name("TestChildClass");
Class testChildClass = builder.make().load(Test.class.getClassLoader(), loadingStrategy).getLoaded();
但是我在创建子 class 时得到 Caused by: java.lang.ClassNotFoundException: Didn't find class "TestParentClass"
。
我也检查过,但根本没用。
不要使用测试的class-loader。这将在您的 class 路径中查找 class 文件。动态 class TestParentClass 将有 none。相反,从 TestParentClass 获取 class-loader:
Class testChildClass = builder.make().load(testParentClass.getClassLoader(), loadingStrategy).getLoaded();
我正在为 android 编写 java 代码,使用 byte-buddy:1.10.17
和 byte-buddy-android:1.10.17
动态创建 classes。我想动态创建一个 class,它将是另一个动态创建的 class 的子 class。
这是我想做的示例代码
AndroidClassLoadingStrategy loadingStrategy = new AndroidClassLoadingStrategy.Wrapping(context.getCacheDir());
DynamicType.Builder builder = new ByteBuddy().subclass(Object.class).name("TestParentClass");
Class testParentClass = builder.make().load(Test.class.getClassLoader(), loadingStrategy).getLoaded();
builder = new ByteBuddy().subclass(testParentClass).name("TestChildClass");
Class testChildClass = builder.make().load(Test.class.getClassLoader(), loadingStrategy).getLoaded();
但是我在创建子 class 时得到 Caused by: java.lang.ClassNotFoundException: Didn't find class "TestParentClass"
。
我也检查过
不要使用测试的class-loader。这将在您的 class 路径中查找 class 文件。动态 class TestParentClass 将有 none。相反,从 TestParentClass 获取 class-loader:
Class testChildClass = builder.make().load(testParentClass.getClassLoader(), loadingStrategy).getLoaded();