【问题标题】:Android: How to Use "uses-library"?Android:如何使用“使用库”?
【发布时间】:2010-02-10 07:31:39
【问题描述】:

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

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

通过 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 客户端的清单文件中的 application 下声明 uses-library。

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    您的选择是:

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

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

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

    【讨论】:

    • 谢谢!从表面上看,选项 1 是最适用的。我会看看你的项目以供参考。
    • 您好 CommonsWare,我查看了您的 CWAC-Cache 项目。 1. 我可以看到您使用 Ant build.xml 来构建和组装 JAR。对于另一个使用该 JAR 的项目,您如何在 Eclipse 中进行设置,以便 (a) 在编码/编译时解决依赖关系,以及 (b) 在部署时,将它们构建到单个 APK 中并部署? 2. 我想 CWAC-Cache 并不意味着独立运行(我正确吗?)。既然如此,为什么还需要在 AndroidManifest.xml 中配置一个带有 MAIN 动作和 LAUNCHER 类别的 Activity?这是必需的吗?
    • 简单:我不使用 Eclipse。 :-) CWAC-Cache 有一个示例演示活动(如果您编译 APK),但它的主要作用是 ant jar 目标,用于创建其他项目可以使用的实际缓存代码的 JAR。 ant jar 任务跳过演示代码(隔离在 .demo 子包中)。
    • 我明白了...我想您使用命令行 aapt 和 apk 工具进行打包和部署?感谢您的建议!我试试看!
    • 好吧,我使用 ant 目标,然后使用 aaptapk 等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2021-02-08
    • 2016-04-13
    相关资源
    最近更新 更多