应用程序包中 class 的 NoClassDefFoundError
NoClassDefFoundError for class within app package
下面是我的activity:
com.domain.app.SampleActivity.java
public class SampleActivity extends Activity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_layout);
DataProviderClass dataProvider = new DataProviderClass();
}
}
com.domain.app.anotherFolder.DataProviderClass.java
public class DataProviderClass {
private DataProviderClassHelper helper = new DataProviderClassHelper();
}
com.domain.app.anotherFolder.DataProviderClassHelper.java
public class DataProviderClassHelper implements ExternalLibInterface {
public DataProviderClassHelper() {
}
}
以下是日志:
I/art (22555): Rejecting re-init on previously-failed class java.lang.Class
I/art (22555): Rejecting re-init on previously-failed class java.lang.Class
I/art (22555): Rejecting re-init on previously-failed class java.lang.Class
I/art (22555): Rejecting re-init on previously-failed class java.lang.Class
I/art (22555): Rejecting re-init on previously-failed class java.lang.Class
E/AndroidRuntime(22555): Process: com.domain.app, PID: 22555
E/AndroidRuntime(22555): java.lang.NoClassDefFoundError: com.domain.app.anotherFolder.DataProviderClassHelper.java
E/AndroidRuntime(22555): at com.domain.app.anotherFolder.DataProviderClass.java.(DataProviderClass.java:77)
E/AndroidRuntime(22555): at com.domain.app.SampleActivity..onCreate(SampleActivity.java:64)
W/ActivityManager( 1103): Force finishing activity 1 com.domain.app/.SampleActivity
对我来说没有意义,一个 class 已初始化,但同一文件夹中的另一个 class 给我一个错误。
在其他类似的问题中,人们在他们试图导入的外部库中遇到了这个错误,但这并没有真正帮助我。
在我的 DataProviderClassHelper
中,我实际上实现了 ExternalLibInterface
接口,该接口在外部库的存根 jar 中提供。
因为它是 provided
,所以代码会成功编译,但实际的东西在运行时对我不可用。为了能够访问系统上的实际内容,我必须在 AndroidManifest.xml
中添加一些特定于库的组件。因此,该解决方案可能无法完全帮助所有人,但可以帮助人们确定问题的原因。
在我的例子中,这是由于 ExternalLibInterface
在运行时不可用。
下面是我的activity:
com.domain.app.SampleActivity.java
public class SampleActivity extends Activity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_layout);
DataProviderClass dataProvider = new DataProviderClass();
}
}
com.domain.app.anotherFolder.DataProviderClass.java
public class DataProviderClass {
private DataProviderClassHelper helper = new DataProviderClassHelper();
}
com.domain.app.anotherFolder.DataProviderClassHelper.java
public class DataProviderClassHelper implements ExternalLibInterface {
public DataProviderClassHelper() {
}
}
以下是日志:
I/art (22555): Rejecting re-init on previously-failed class java.lang.Class I/art (22555): Rejecting re-init on previously-failed class java.lang.Class I/art (22555): Rejecting re-init on previously-failed class java.lang.Class I/art (22555): Rejecting re-init on previously-failed class java.lang.Class I/art (22555): Rejecting re-init on previously-failed class java.lang.Class E/AndroidRuntime(22555): Process: com.domain.app, PID: 22555 E/AndroidRuntime(22555): java.lang.NoClassDefFoundError: com.domain.app.anotherFolder.DataProviderClassHelper.java E/AndroidRuntime(22555): at com.domain.app.anotherFolder.DataProviderClass.java.(DataProviderClass.java:77) E/AndroidRuntime(22555): at com.domain.app.SampleActivity..onCreate(SampleActivity.java:64) W/ActivityManager( 1103): Force finishing activity 1 com.domain.app/.SampleActivity
对我来说没有意义,一个 class 已初始化,但同一文件夹中的另一个 class 给我一个错误。
在其他类似的问题中,人们在他们试图导入的外部库中遇到了这个错误,但这并没有真正帮助我。
在我的 DataProviderClassHelper
中,我实际上实现了 ExternalLibInterface
接口,该接口在外部库的存根 jar 中提供。
因为它是 provided
,所以代码会成功编译,但实际的东西在运行时对我不可用。为了能够访问系统上的实际内容,我必须在 AndroidManifest.xml
中添加一些特定于库的组件。因此,该解决方案可能无法完全帮助所有人,但可以帮助人们确定问题的原因。
在我的例子中,这是由于 ExternalLibInterface
在运行时不可用。