Невозможно создать экземпляр активности ... Вызывается ClassNotFoundException - PullRequest
8 голосов
/ 13 июня 2011

После преобразования отлично работающего приложения в библиотеку (включая ее класс Activity!) Я пытаюсь создать приложение, которое использует всю эту библиотеку, просто переклассифицируя активность библиотеки:

package com.example.baseapp.paid;

import android.os.Bundle;
import com.example.baseapp.LibActivity;


public class PaidActivity extends LibActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

Eclipse buildsэто недавно «заново спроектированное» приложение без каких-либо ошибок, но когда я пытаюсь запустить его, я получаю исключение:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.baseapp.paid/com.example.baseapp.paid.PaidActivity}: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.apk]
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4627)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
    ... 11 more

Я не понимаю, почему это происходит, так как ошибка «Класс не найден»"когда класс является именно производным классом, созданным (без ошибок!) и теперь пытающимся запустить.

Как мне устранить эту проблему?

Чего мне не хватает?

РЕДАКТИРОВАТЬ (отвечая на вопрос @CaspNZ):

Это файл AndroidManifest.xml проекта библиотеки:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.baseapp"
      android:versionCode="5"
      android:versionName="1.1.2"> 
    <uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.INTERNET"/>   
</manifest>

А это файл AndroidManifest.xmlприложение, использующее проект библиотеки:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.baseapp.paid"
      android:versionCode="5"
      android:versionName="1.1.2"> 
    <uses-sdk android:minSdkVersion="8" />
    <uses-library android:name="AppLibrary" />

    <uses-permission android:name="android.permission.INTERNET"/>   

    <application android:icon="@drawable/icon">
        <activity android:name=".PaidActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.example.baseapp.LibActivity" android:label="com.example.baseapp.LibActivity:string/rx_label">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="EditPreferences" 
                android:label="com.example.baseapp.LibActivity:string/app_name">
        </activity>
    </application>
</manifest>

Буду признателен за любую подсказку, чтобы попытаться устранить эту проблему, так как я впервые пытаюсь использовать проект библиотеки, и я не знакомчтобы понять, как это работает.

Ответы [ 4 ]

10 голосов
/ 17 мая 2013

Для тех, кто обновился до ADT 22, убедитесь, что вы отметили частные библиотеки Android на вкладке «Путь сборки Java»> «Порядок и экспорт». Для получения дополнительной информации прочитайте это . Это работает для меня. Может быть, мало сил, чтобы переместить пользователей в Android Studio вместо Eclipse:))

1 голос
/ 13 июня 2011

Я наконец решил проблему.Оказывается, у меня было 2 критических параметра в свойствах обоих проектов, которые были установлены неправильно:

  1. В проекте библиотеки "Is Library" был проверен не по некоторым причинам.Я мог бы поклясться, что проверил это, но, зная, насколько капризной может быть среда разработки Android под Eclipse, я подозреваю, что она не была проверена Eclipse (или плагином ADT) в результате некоторого сбоя.
  2. ВПрикладной проект, я забыл добавить свой библиотечный проект в качестве ссылки через кнопку Add....(насколько глупым я могу быть?)

Я надеюсь, что другие новички, такие как я, сочтут эту информацию полезной.Иногда чрезвычайно трудная проблема для отладки скрывает ошибку конфигурации, когда невинный ничего не подозревающий программист полагает, что об этом уже позаботились ...

1 голос
/ 13 июня 2011

Это может произойти, если вы перечислите действия в манифесте библиотеки, а не в манифесте приложения.Нет необходимости иметь теги в манифесте библиотеки.(См., Например, эту ветку .)

0 голосов
/ 09 августа 2012

У меня была такая же ошибка в одном из моих проектов, и я подумал, что могу поделиться тем, как я исправил свой.

В какой-то момент моего проекта мне пришлось изменить одно из имен пакетов, которые я использую, где расположены все мои классы Activity. Когда я это сделал, я забыл обновить AndroidManifest, что вызвало у меня ту же ошибку. Обновление исправило это.

...