Android 如何引用辅助索引中jar中存在的活动

Android 如何引用辅助索引中jar中存在的活动,android,jar,build,admob,dex,Android,Jar,Build,Admob,Dex,我已经创建了一个应用程序,它使用了大量的广告网络sdk 由于项目中使用了大量库(广告网络SDK),我在姜饼设备中遇到了以下问题: E/dalvikvm(7815):Linearloc超出容量(5242880),最后一次=5905 我通过创建多个dex文件解决了这个问题,如 为了满足我的特殊需要,我为每个广告网络创建了一个索引(库+相关文件),项目的主要部分在主索引中 简单地说,我将admob jar放在一个辅助索引中,我可以显示admob横幅,但我不能显示间隙,因为它们使用活动来显示它(com

我已经创建了一个应用程序,它使用了大量的广告网络sdk

由于项目中使用了大量库(广告网络SDK),我在姜饼设备中遇到了以下问题:

E/dalvikvm(7815):Linearloc超出容量(5242880),最后一次=5905

我通过创建多个dex文件解决了这个问题,如

为了满足我的特殊需要,我为每个广告网络创建了一个索引(库+相关文件),项目的主要部分在主索引中

简单地说,我将admob jar放在一个辅助索引中,我可以显示admob横幅,但我不能显示间隙,因为它们使用活动来显示它(com.google.ads.AdActivity)。我不知道如何正确地引用它

我把舱单放进去了

        <activity
        android:name="com.google.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

但是当我试图显示间隙时,我有以下错误

03-28 12:10:57.741:E/AndroidRuntime(32554):致命异常:主 03-28 12:10:57.741:E/AndroidRuntime(32554):进程:my.package,PID:32554 03-28 12:10:57.741:E/AndroidRuntime(32554):java.lang.RuntimeException:无法实例化活动组件信息{my.package/com.google.ads.AdActivity}:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”//system/framework/com.google.android.maps.jar],zip文件中未找到类“com.google.ads.AdActivity”“/data/app/my.package-2.apk”],nativeLibraryDirectories=[/data/app-lib/my.package-2,/vendor/lib,/system/lib]] 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.app.ActivityThread.access$800(ActivityThread.java:135) 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.os.Handler.dispatchMessage(Handler.java:102)上 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.os.Looper.loop(Looper.java:136) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于android.app.ActivityThread.main(ActivityThread.java:5017) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于java.lang.reflect.Method.Invokenactive(本机方法) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于java.lang.reflect.Method.invoke(Method.java:515) 03-28 12:10:57.741:E/AndroidRuntime(32554):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 03-28 12:10:57.741:E/AndroidRuntime(32554):在dalvik.system.NativeStart.main(本机方法) 03-28 12:10:57.741:E/AndroidRuntime(32554):原因:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/system/framework/com.google.android.maps.jar],zip文件/data/app/my.package-2.apk],nativeLibraryDirectories=[/data/app lib/my.package-2,/vendor/lib,/system/lib]] 03-28 12:10:57.741:E/AndroidRuntime(32554):位于dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于java.lang.ClassLoader.loadClass(ClassLoader.java:497) 03-28 12:10:57.741:E/AndroidRuntime(32554):位于java.lang.ClassLoader.loadClass(ClassLoader.java:457) 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.app.Instrumentation.newActivity(Instrumentation.java:1061)上 03-28 12:10:57.741:E/AndroidRuntime(32554):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)上 03-28 12:10:57.741:E/AndroidRuntime(32554):…还有11个

有人能帮我吗


感谢您的时间。

无法在辅助索引中引用活动。另一种方法是提取活动类文件从jar中取出并将它们放在主dex/apk中的另一个项目/jar中。在复杂的类层次结构中,这可能不容易,甚至不可能,但在我的情况下,活动具有相对较少的依赖项,并且这种方法有效。

AFAIK,您想要的是不可能的。您的组件(例如,活动)需要在主类路径中,而不是从其他绑定到其他DEX的类加载器中。Android框架代码不知道其他DEX文件及其类加载器,只有您的应用程序代码知道。谢谢您的回复,您说“Android框架代码不知道其他DEX文件及其类加载器——只有应用程序代码知道。“也许有一种方法可以将新的dex包含在dexpathlist中我也遇到了同样的错误。。。您是否使用自己的类加载器加载活动?请记住您使用的jar的许可证-它可能会禁止混淆类及其结构。