Использование проекта библиотеки 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" ... />
Ответ 4
Вы добавили в манифест?
http://developer.android.com/guide/topics/manifest/uses-library-element.html
Ответ 5
вам нужно импортировать только код действия (а не манифест), а затем объявить свою активность (из библиотеки) в манифесте вашего второго проекта
Ответ 6
Я знаю, что вопрос довольно старый, но я думаю, что это может помочь таким людям, как я, придумать ту же проблему.
Используя Eclipse, лучший способ совместного использования кода и действий среди библиотек, вероятно, тот, который можно найти в документации по Android:
Управление проектами из Eclipse с помощью ADT