我创建了一个使用大量广告网络的应用程序。
由于项目中使用了大量库(广告网络SDK),我在GingerBread设备中遇到以下问题:
E / dalvikvm(7815):LinearAlloc超出容量(5242880),最后= 5905
我通过创建多个dex文件来解决它,如下所述 http://android-developers.blogspot.fr/2011/07/custom-class-loading-in-dalvik.html
根据我的具体需求,我为每个广告网络(图书馆+相关文件)创建了一个dex,项目的主要部分位于主要的dex中。
简单来说,我将admob jar放在次要dex中,我可以显示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:无法实例化活动ComponentInfo {my.package / com.google.ads.AdActivity}:java.lang.ClassNotFoundException:Didn&#39 ;找到课程&#34; com.google.ads.AdActivity&#34;在路径上:DexPathList [[zip文件&#34; /system/framework/com.google.android.maps.jar" ;, zip文件&#34; /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):at java.lang.reflect.Method.invokeNative(Native Method) 03-28 12:10:57.741:E / AndroidRuntime(32554):at java.lang.reflect.Method.invoke(Method.java:515) 03-28 12:10:57.741:E / AndroidRuntime(32554):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 03-28 12:10:57.741:E / AndroidRuntime(32554):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 03-28 12:10:57.741:E / AndroidRuntime(32554):at dalvik.system.NativeStart.main(Native Method) 03-28 12:10:57.741:E / AndroidRuntime(32554):引起:java.lang.ClassNotFoundException:找不到类&#34; com.google.ads.AdActivity&#34;在路径上:DexPathList [[zip文件&#34; /system/framework/com.google.android.maps.jar" ;, zip文件&#34; /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):at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 03-28 12:10:57.741:E / AndroidRuntime(32554):at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 03-28 12:10:57.741:E / AndroidRuntime(32554):at 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 more
有人可以帮我这个吗?
感谢您的时间。
答案 0 :(得分:0)
无法在次要dex中引用活动。另一种方法是从jar中提取活动类文件,并将它们放在primary dex / apk中的另一个项目/ jar中。在复杂的类层次结构的情况下,它可能很容易甚至不可能,但在我的情况下,活动具有相对较少的依赖性,并且这种方法有效。