Tôi vừa cấu trúc lại một ứng dụng thành một thư viện khung và một ứng dụng, nhưng bây giờ khi tôi thử và khởi động ứng dụng đó trong trình giả lập, tôi nhận được dấu vết ngăn xếp lỗi sau:
06-02 18:22:35.529: E/AndroidRuntime(586): FATAL EXCEPTION: main
06-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
Thông thường, điều này có nghĩa là tệp kê khai bị sai theo một cách nào đó, nhưng tôi đã kiểm tra kỹ mọi thứ mà tôi có thể nghĩ ra.
Đây là lớp hoạt động của tôi:
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;
}
};
}
}
Như bạn có thể thấy, nó được liệt kê chính xác trong tệp kê khai:
<?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>
Tôi không biết làm thế nào để khắc phục điều này, và sẽ đánh giá cao bất kỳ sự giúp đỡ nào. Tôi đã quét nhiều câu hỏi tương tự trên SO mà không thấy hành vi cụ thể này.
Thêm thông tin:
- Tôi đã kiểm tra bên trong APK được tạo và lớp có mục nhập trong tệp class.dex
- Tôi đã thử dọn dẹp / xây dựng dự án trong nhật thực
- Tôi đã thử sử dụng một hình ảnh thiết bị hoàn toàn mới chưa có bản sao của APK trên đó
- Tôi đã thay đổi dự án thư viện thành một java thông thường, sau đó đổi lại thành một dự án android, không có gì khác biệt
- Thêm SimonSaysActivity trừu tượng vào tệp kê khai không có gì khác biệt.
- Tôi đã thử biến mọi phụ thuộc thành dự án thư viện android và đồng bộ hóa phiên bản android mà họ yêu cầu, nó không giúp được gì
Đã tìm ra giải pháp (xem bên dưới). Gửi đến tất cả những người đã đăng câu trả lời / nhận xét: Tất cả các bạn đều tuyệt vời, cảm ơn vì đã giúp tôi giải quyết vấn đề!
Có vẻ như điều này được giới thiệu bởi một bản nâng cấp công cụ SDK. Cảm ơn @Nick bên dưới trong nhận xét cho liên kết này: http://iqadd.com/item/noclassdeffounderror-adt-fix