Использование проекта библиотеки Android Деятельность в рамках другого проекта

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

В библиотеке есть активность, объявленная в AndroidManifest. Когда я попробую сделать следующее во втором проекте:

        Intent intent = new Intent(this, ReaderActivity.class);
        startActivity(intent);

Я получаю следующее исключение:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.digitalpages.reader.demo/br.com.digitalpages.reader.demo.ReaderDemoActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {br.com.digitalpages.reader.demo/br.com.digitalpages.reader.ReaderActivity}; have you declared this activity in your AndroidManifest.xml?
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
...
 Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {br.com.digitalpages.reader.demo/br.com.digitalpages.reader.ReaderActivity}; have you declared this activity in your AndroidManifest.xml?
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
...

Как я могу открыть Activity из другого проекта?

EDIT: По ответам пользователей я добавил следующую строку в мой второй проект

<uses-library android:name="br.com.digitalpages.reader" android:required="true" />

Но он все еще не работает

Ответ 1

Я считаю, что вы должны включить <activity> в вашем собственном AndroidManifest.xml - я не думаю, что его берут из библиотеки. У меня нет моей справки для этого.

Обновление: Это официальное решение. Из документа:

Объявление компонентов библиотеки в файле манифеста

В файле манифеста проекта приложения вы должны добавить объявления всех компонентов, которые будут использовать приложение, которые импортированный из проекта библиотеки. Например, вы должны объявить <activity>, <service>, <receiver>, <provider> и т.д., а также <permission>, <uses-library> и аналогичные элементы.

Объявления должны ссылаться на компоненты библиотеки по их полные имена пакетов, где это необходимо.

Ответ 2

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setComponent(new ComponentName("packagename//ex-com.hello", 
                                     "classname//ex-com.hello.ExampleActivity"));
startActivity(intent);

И убедитесь, что в библиотеке вы объявили о действиях. Вам не нужно объявлять действия библиотеки в вашем текущем манифесте проекта.

Ответ 3

Это работает:

В своей библиотеке поставьте свой собственный Activity:

public class MyLibraryActivity extends ListActivity { ... }

Не нужно помещать его в манифест. В своем проекте Android Android создайте пустую (фиктивную) оболочку:

public class MyActivity extends MyLibraryActivity { } 

и добавьте ссылку на этот класс в ваш манифест:

<activity android:name="my_package.MyActivity" ... />

Ответ 5

вам нужно импортировать только код действия (а не манифест), а затем объявить свою активность (из библиотеки) в манифесте вашего второго проекта

Ответ 6

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

Используя Eclipse, лучший способ совместного использования кода и действий среди библиотек, вероятно, тот, который можно найти в документации по Android:

Управление проектами из Eclipse с помощью ADT