Android:如何使用“使用库”?

时间:2010-02-09 15:42:11

标签: android

我的Android应用程序可分为客户端UI层和API层。我想将它们部署为单独的“应用程序”,以便可以重用API层。

在Eclipse中,我将它们编写为2个独立的Android项目。在客户端UI项目中,我在其构建路径中声明API项目(项目 - > Properies - > Java构建路径 - >项目)。

通过Eclipse(在我的实际G1手机上)部署客户端UI项目时,它会自动部署API项目(打包到APK中)。

但是,在启动客户端UI应用程序时,我遇到了这个错误:

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)

环顾四周,似乎就像我应该在UI客户端的清单文件中声明应用程序中的uses-library。

问题是,我应该在android:name下使用库?开发指南说“图书馆的名称”,但图书馆的名称是什么? (我的意思是,在我的API“应用程序”中,我没有在任何地方声明任何库名。)

1 个答案:

答案 0 :(得分:10)

我认为<uses-library>与此无关。

您的选择是:

  1. 将您的“库”实现为JAR,以便在编译时包含在其他项目中。只要您的图书馆没有尝试定义资源,您的状态就会很好。请参阅我的github page上的CWAC项目,了解如何进行设置的示例。

  2. 将您的“库”实施为包含使用AIDL定义的远程服务的单独APK。不要像在Eclipse中那样尝试混合它们的构建路径,而是遵循AIDL规则并让每个项目使用一个共同的AIDL定义。您还需要安排用户安装两个APK。

  3. 将您的“库”实施为包含ContentProvider的单独APK。不要像在Eclipse中那样尝试混合他们的构建路径,而是遵循ContentProvider规则并让客户端通过ContentResolver和定义的Uri访问提供者。您还需要安排用户安装两个APK。