2010-02-09 215 views
6

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

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

当部署通过Eclipse中的客户端UI项目(我的实际G1手机上),它会自动部署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客户端清单文件正在申请申报用途库。

问题是,我应该把什么放在android下:名称为uses-library?开发指南说“图书馆的名称”,但图书馆的名称是什么? (我的意思是,在我的API“应用程序”,我还没有宣布任何库名的任何地方。)

回答

10

我不相信<uses-library>与此有关。

的选项有:

  1. 实现你的“图书馆”作为一个JAR,被列入在编译时等项目。只要你的图书馆没有试图定义资源,你的状态就很好。请参阅我的github page上的CWAC项目了解如何设置此示例。

  2. 实施你的“文库”为包含一个远程服务,使用AIDL定义一个单独的APK。不要试图按照您目前在Eclipse中所做的那样混合构建路径,而是要遵循AIDL规则并让每个项目都使用通用的AIDL定义。您还需要安排您的用户安装两个APK。

  3. 实现你的“库”为包含ContentProvider一个单独的APK。不要试图按照您目前在Eclipse中所做的方式来融合构建路径,而应遵循ContentProvider规则,并让客户端通过ContentResolver和定义的Uri访问提供者。您还需要安排您的用户安装两个APK。
+1

谢谢!从它的角度来看,选项1是最适用的。我会看看你的项目以供参考。 – 2010-02-10 00:32:35

+0

嗨CommonsWare,我看了你的CWAC缓存项目。 1.我可以看到你使用Ant build.xml来构建和组装JAR。对于另一个使用该JAR的项目,您如何在Eclipse中进行设置,以便(a)在编码/编译时解析依赖关系;(b)在部署时,它们被构建到一个APK中并部署? 2.我认为CWAC-Cache不是单独运行的(我是否正确?)。在这种情况下,为什么仍然需要使用MAIN操作和LAUNCHER类别在AndroidManifest.xml中配置Activity?这是必需的吗? – 2010-02-10 21:58:26

+0

简单:我不使用Eclipse。 :-) CWAC-Cache有一个示例演示活动(如果您编译APK),但其主要作用是“ant jar”目标来创建其他项目可以使用的实际缓存代码的JAR。 'ant jar'任务跳过演示代码(用'.demo'子包封装)。 – CommonsWare 2010-02-10 22:45:33