我正在尝试开发一个“动态”Android 应用程序。
动态是指我在清单中列出了一个在运行时“构建”的活动。
我可以很好地构建所需的活动,但是,当我尝试启动它时,我的应用程序失败了......
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.research.ps/com.research.Dynamic}: java.lang.ClassNotFoundException:
Didn't find class "com.research.Dynamic" on path: DexPathList[[zip file "/data/app/com.research.ps-1/base.apk"],nativeLibraryDirectories=[/data/app/com.research.ps-1/lib/arm,
/data/app/com.research.ps-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
有没有一种方法可以在运行时成功实例化 Android Activity?
有没有办法将“临时”或“shell”活动添加到我的应用程序路径中?然后用我的动态实例替换“临时”活动?
UPDATE
我的清单 XML 包含此条目
<activity
android:name=".Dynamic"
android:label="@string/title_activity_dynamic"
android:theme="@style/AppTheme.NoActionBar" />
但是,我的应用程序中不包含名为“动态”的活动。
我正在使用 ByteBuddy 来构建我的动态活动:-
final Class<? extends android.support.v7.app.AppCompatActivity> dynamicType = new ByteBuddy(ClassFileVersion.JAVA_V8)
.subclass(android.support.v7.app.AppCompatActivity.class, IMITATE_SUPER_CLASS)
.name("com.research.Dynamic")
.make()
.load(getClass().getClassLoader(), new AndroidClassLoadingStrategy.Wrapping(this.getDir("dexgen", Context.MODE_PRIVATE)))
.getLoaded();
final Intent intent = new Intent(this, dynamicType);
startActivity(intent);