想了解android库项目中的方法引用太多–ClassNotFoundException的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于android引用第三方库的相关问题,此外,我们还将为
想了解android库项目中的方法引用太多 – ClassNotFoundException的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于android 引用第三方库的相关问题,此外,我们还将为您介绍关于Android 5.x 系统 ClassNotFoundException 的坑、Android :: Extending MapActivity => classNotFound Exception、Android Activity ClassNotFoundException-尝试了一切、Android Caused by: java.lang.ClassNotFoundException解决办法的新知识。
本文目录一览:- android库项目中的方法引用太多 – ClassNotFoundException(android 引用第三方库)
- Android 5.x 系统 ClassNotFoundException 的坑
- Android :: Extending MapActivity => classNotFound Exception
- Android Activity ClassNotFoundException-尝试了一切
- Android Caused by: java.lang.ClassNotFoundException解决办法
android库项目中的方法引用太多 – ClassNotFoundException(android 引用第三方库)
我在我的主项目的libs文件夹中添加了AAR文件,并在build.gradle中编译了相同的文件.
1)我是否需要在库以及主要的android项目中添加multi-dex支持?
2)我是否需要在两个项目中添加afterEvaluate脚本?
最重要的是,如果我们得到多dex工作,我们可能会遇到问题,在主要的android项目中,如果我们尝试使用的任何类不在主dex列表中,我们会得到Classnotfound异常.
编辑: – 我正在尝试根据我的测试发布更新,所以任何有任何想法的人都可以帮助我们所有人.
项目中使用的依赖项: –
dependencies { compile filetree(include: [''*.jar''],dir: ''libs'') compile ''com.android.support:appcompat-v7:22.2.1'' compile ''com.google.android.gms:play-services-gcm:7.8.0'' compile ''com.google.android.gms:play-services-location:7.8.0'' compile ''com.google.android.gms:play-services-ads:7.8.0'' compile ''co.pointwise:pw-proto:0.0.5'' compile ''com.amazonaws:aws-android-sdk-sns:2.2.1'' compile ''com.amazonaws:aws-android-sdk-core:2.2.1'' compile ''com.github.tony19:logback-android-core:1.1.1-4'' compile ''com.github.tony19:logback-android-classic:1.1.1-4'' compile ''org.slf4j:slf4j-api:1.7.6'' compile ''com.android.support:multidex:1.0.0'' compile(name: ''sdk-debug'',ext: ''aar'') // my library project // Crashlytics Kit compile(''com.crashlytics.sdk.android:crashlytics:2.5.1@aar'') { transitive = true } }
17-08-2015 – 根据文档,我修改了我的代码及其现在的工作,但我无法使用proguard生成签名的apk.
Proguard文件看起来像: –
-keep class ch.qos.** { *; } -keep class org.slf4j.** { *; } -keep class io.protostuff.** { *; } -keep class com.google.common.** { *; } -keep com.amazonaws.http.** { *; } -keep com.amazonaws.internal.** { *; } -keepattributes *Annotation* -keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); } # Keep SafeParcelable value,needed for reflection. This is required to support backwards # compatibility of some classes. -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } # Keep the names of classes/members we need for client functionality. -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } # Needed for Parcelable/SafeParcelable Creators to not get stripped -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
错误: –
Warning: com.amazonaws.AmazonWebServiceClient: can''t find referenced class org.apache.commons.logging.LogFactory Warning: ch.qos.logback.core.net.SMTPAppenderBase: can''t find referenced class javax.mail.internet.MimeMessage Warning: com.google.common.base.Absent: can''t find referenced class javax.annotation.Nullable Warning: there were 1406 unresolved references to classes or interfaces. You may need to add missing library jars or update their versions. If your code works fine without the missing classes,you can suppress the warnings with ''-dontwarn'' options. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) Warning: there were 9 unresolved references to program class members. Your input classes appear to be inconsistent. You may need to recompile the code. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) :app:proguardProdRelease Failed
我之前也遇到过这个问题,我无法在上一个项目中解决它,但这次我需要解决它.
有任何想法吗?
解决方法
回答:
Do I need to add multi-dex support in both library as well as main
android project?
仅在主Android项目中指定’multiDexEnabled = true''(在defaultConfig下).无需在库中声明它.
Do I need to add afterEvaluate script in both project?
适用于Android的Gradle插件v0.14.0增加了对multi-dex的支持,您不再需要添加您提到的代码.该插件将自动创建主dex列表,并将所需信息传递给dex进程.
发布结果,如果您仍然有ClassNotFoundException错误,请告诉我们.
I’m receiving the following error when trying to build a release
variant with proguard:
Warning: com.amazonaws.AmazonWebServiceClient:
can’t find referenced class org.apache.commons.logging.LogFactory
在其github repo中,AWS作者在instructions中介绍了如何设置proguard配置:
-keep class org.apache.commons.logging.** { *; } -keep class com.amazonaws.services.sqs.QueueUrlHandler { *; } -keep class com.amazonaws.javax.xml.transform.sax.* { public *; } -keep class com.amazonaws.javax.xml.stream.** { *; } -keep class com.amazonaws.services.**.model.*Exception* { *; } -keep class com.amazonaws.internal.** { *; } -keep class org.codehaus.** { *; } -keep class org.joda.convert.* { *; } -keepattributes Signature,*Annotation*,EnclosingMethod -keepnames class com.fasterxml.jackson.** { *; } -keepnames class com.amazonaws.** { *; } -dontwarn com.amazonaws.auth.policy.conditions.S3ConditionFactory -dontwarn org.joda.time.** -dontwarn com.fasterxml.jackson.databind.** -dontwarn javax.xml.stream.events.** -dontwarn org.codehaus.jackson.** -dontwarn org.apache.commons.logging.impl.** -dontwarn org.apache.http.conn.scheme.** -dontwarn org.apache.http.annotation.** -dontwarn org.ietf.jgss.** -dontwarn org.w3c.dom.bootstrap.**
请注意,您的proguard配置缺少org.apache.commons.logging.**条目.
Android 5.x 系统 ClassNotFoundException 的坑
Android 5.x 的 ART 虚拟机处理 dex 文件的时候,只处理了 classes.dex-classes99.dex,超过部分丢弃,具体源码可以查看这里,在编译的时候默认 dexOption.preDexLibraries=true,如果依赖了太多的 lib,每个 lib 编译成一个 dex,导致 app 中有超过 100 个 dex,使用 5.x 手机作为开发机的时候就会出现莫名其妙的 ClassNotFoundException,只需要在 App 的 build.gradle 中 android 下添加 dexOptions {preDexLibraries=false} 即可
Android :: Extending MapActivity => classNotFound Exception
我想创建一个MapView,但扩展MapActivity会抛出一个classNotFoundException:
/AndroidRuntime( 374): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2585)
E/AndroidRuntime( 374): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 374): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime( 374): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime( 374): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 374): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 374): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 374): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 374): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 374): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 374): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 374): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 374): Caused by: java.lang.classNotFoundException: com.androidcourse.phonemapper.view.MapShowActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.androidcourse.phonemapper-2.apk]
E/AndroidRuntime( 374): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime( 374): at java.lang.classLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime( 374): at java.lang.classLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime( 374): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime( 374): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2577)
我有一个Google Maps API密钥,我将项目设置为Google Api,我使用的是Android Google Api AVD(模拟器),我确实在AndroidManifest.xml中包含了该标记.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidcourse.phonemapper" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
……………..
<activity android:name=".view.WelcomeActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="api_key_is_here_just_wont_show_it_to_everybody"
/>
</RelativeLayout>
解决方法:
尝试将包设置为“com.androidcourse.phonemapper.view”:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidcourse.phonemapper.view" android:versionCode="1"
android:versionName="1.0">
然后引用它:
<activity android:name=".WelcomeActivity"
Android Activity ClassNotFoundException-尝试了一切
我刚刚将应用重构为框架库和应用,但是现在当我尝试在模拟器中启动该应用时,我得到了以下错误堆栈跟踪:
06-02 18:22:35.529: E/AndroidRuntime(586): FATAL EXCEPTION: main06-02 18:22:35.529: E/AndroidRuntime(586): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.matthewrathbone.eastersays/com.matthewrathbone.eastersays.EasterSimonSaysActivity}: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk]06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.access$2300(ActivityThread.java:125)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99)06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4627)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:521)06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method)06-02 18:22:35.529: E/AndroidRuntime(586): Caused by: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk]06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)06-02 18:22:35.529: E/AndroidRuntime(586): ... 11 more
通常,这意味着清单文件在某种程度上是错误的,但是我已经仔细检查了所有我能想到的内容。
这是我的活动课:
package com.matthewrathbone.eastersays;import android.os.Bundle;import com.rathboma.simonsays.Assets.Season;import com.rathboma.simonsays.SeasonPicker;import com.rathboma.simonsays.SimonSaysActivity; public class EasterSimonSaysActivity extends SimonSaysActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public SeasonPicker getSeasonPicker() { return new SeasonPicker(){ @Override public Season getSeason() { // TODO Auto-generated method stub return Season.EASTER; } }; } }
如你所见,清单中正确列出了它:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.matthewrathbone.eastersays" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".EasterSimonSaysActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
我不知道如何解决此问题,将不胜感激。我在SO上扫描了许多类似的问题,却没有看到这种特殊的行为。
更多信息:
- 我已经检查了生成的APK,并且该类在classes.dex文件中有一个条目
- 我曾尝试在Eclipse中清理/构建项目
- 我尝试使用全新的设备映像,但该映像上没有APK的副本
- 我已将库项目更改为常规Java,然后又更改为android项目,没有区别
- 将抽象的SimonSaysActivity添加到清单没有区别。
- 我尝试将每个依赖项都设为一个android库项目,并同步他们需要的android版本,但这样做没有帮助
- 找到了解决方案(请参阅下文)。对于每个发表了答案/评论的人:你们都很高兴,感谢你帮助我解决问题!
看起来是SDK工具升级引入的。感谢以下在此链接的注释中的@Nick:http ://iqadd.com/item/noclassdeffounderror-adt-fix
答案1
小编典典花了一些时间在自己的项目上,在尝试运行我的主项目时,我能够复制你的问题并获得完全相同的异常堆栈跟踪,所以我认为这可能是原因:
就像我的想法一样,这全都涉及到如何在Android主项目(一个简单的Eclipse配置设置)中引用Android库项目。
错误的方式:
右键单击主项目,选择Properties -> Java Build Path -> Projects -> Add
…,这会将Android库Project作为依赖项添加到Android主项目的构建路径中,此操作无效。如果在主项目中定义了所有必需的Android相关资源,则在编译时不会出现任何错误,但是在运行应用程序时,你会得到问题中所述的异常。
正确的方法:
右键单击主项目,Properties -> Android
在“库”部分中选择,在此处添加你的Android库项目。查看官方开发指南,参考图书馆项目。这应该可以解决所有问题。还要注意,你必须使用相对路径引用实际的Android库项目,如“ 库项目-开发注意事项”中所述。
希望这可以帮助。
Android Caused by: java.lang.ClassNotFoundException解决办法
Android Caused by: java.lang.classNotFoundException解决办法
出现问题:
08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: java.lang.classNotFoundException:XXXXX in loader dalvik.system.PathClassLoader[/data/app/XXXX.apk]
我想大家经常因为疏忽出现ClassNotFoundException的异常,这个异常在Android开发中无非就是告诉你类没有找到,那么什么原因导致没找到呢?
其实一般分为2种情况:
1、启动activity的时候,在AndroidManifest.xml 可能压根你就忘了添加一个activity,或者说activity的包名或者名字写错了,这个犯错几率很高的
2、你的使用的class,是一个外部的jar包,当在工程中编译使用时,发布成APK并没有包含JAR文件,所以APK在执行的时候就找不到JAR文件,会报错。
所以一定在“Order and Export”里,勾选使用的jar包。切记!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
我们今天的关于android库项目中的方法引用太多 – ClassNotFoundException和android 引用第三方库的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android 5.x 系统 ClassNotFoundException 的坑、Android :: Extending MapActivity => classNotFound Exception、Android Activity ClassNotFoundException-尝试了一切、Android Caused by: java.lang.ClassNotFoundException解决办法的相关信息,请在本站查询。
本文标签: