Android: Как использовать "uses-library"?

Мое приложение Android можно разделить на слой пользовательского интерфейса клиента и уровень API. я хотел бы развернуть их как отдельные "приложения", чтобы можно было повторно использовать слой API.

В Eclipse я пишу их как 2 отдельных Android-проекта. В проекте клиентского интерфейса я объявляю проект API в его пути сборки (Project → Properies → Java Build Path → Projects).

При развертывании проекта клиентского интерфейса через Eclipse (на моем фактическом телефоне G1) он автоматически развертывает проект API (упакованный в APK).

Однако при запуске приложения клиентского интерфейса я ударяю эту ошибку:

Uncaught handler: thread main exiting due to uncaught exception
java.lang.VerifyError: myapp.android.testuiclient.Main
    at java.lang.Class.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1472)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1097)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    at android.app.ActivityThread.access$2100(ActivityThread.java:116)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4203)
    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:791)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
    at dalvik.system.NativeStart.main(Native Method)

Оглядываясь, кажется, что я должен объявить использование-библиотеки под приложением в файле манифеста для клиента пользовательского интерфейса.

Вопрос: что я должен поставить под андроид: имя для uses-library? Dev guide говорит "имя библиотеки", но как называется библиотека? (я имею в виду, что в моем приложении "API" я нигде не объявлял ни одного имени библиотеки.)

Ответ 1

Я не верю, что <uses-library> здесь имеет значение.

Ваши варианты:

  • Реализовать свою "библиотеку" как JAR, которая будет включена в другие проекты во время компиляции. Пока ваша библиотека не пытается определить ресурсы, вы находитесь в прекрасной форме. См. Проекты CWAC на моей странице

  • Реализовать свою "библиотеку" как отдельный APK, содержащий ContentProvider. Не пытайтесь смешивать свои пути сборки, как вы сейчас делаете в Eclipse, а следуете правилам ContentProvider и предоставляете клиенту доступ к провайдеру через ContentResolver и определенный Uri. Вам также необходимо будет настроить для ваших пользователей установку APK.