安卓工作室 0.8.2 : project using an sdk add-on which provides a jar library

标签 android android-studio android-service

我正在尝试构建一个 SDK 附加组件,以便开发人员可以使用我们的库。我开始使用这个示例(一个包含系统服务的 jar 库插件):

https://github.com/gibsson/basic_sdk_addon
https://github.com/gibsson/BasicService
https://github.com/gibsson/BasicClient

我已按照 BasicService 和 BasicClient github 页面中的说明进行操作,并通过使用 AOSP(适用于 Android 4.3)构建这两个应用程序成功创建了一个工作图像。
我通过将以下内容添加到 device.mk 文件来构建这两个包:

PRODUCT_PACKAGES += \
    com.gibsson.basic.service.lib \
    com.gibsson.basic.service.lib.xml \
    BasicServiceApp \
    BasicClient

这样一来,一切都在图像中构建并正常工作。

介绍结束

我从构建过程中删除了 BasicClient 包,我正尝试将此客户端与 SDK 一起引入 Android Studio,就像 Android 开发人员所做的那样(他们无权访问 AOSP)

按照说明并使用此命令成功创建了 basic_sdk_addon:

AOSP$ make PRODUCT-basic_sdk_addon-sdk_addon

我使用用户定义的存储库在 Android Studio 中安装了插件。在 BasicClient 项目中,我必须手动将 .jar 文件添加到 app/libs 文件夹并单击“添加为库”才能正确编译 BasicClient。

尝试从 AndroidStudio 运行/调试 BasicClient 时,出现以下错误(来自 logcat,更详细):

I/ActivityManager( 2544): Start proc com.gibsson.basic.client for activity com.gibsson.basic.client/.BasicActivity: pid=3311 uid=10044 gids={50044, 1015, 1028}
W/dalvikvm( 3311): Class resolved by unexpected DEX: Lcom/gibsson/basic/client/BasicActivity;(0x4213e238):0x40030000 ref [Lcom/gibsson/basic/service/lib/BasicManager;] Lcom/gibsson/basic/service/lib/BasicManager;(0x4213e238):0x4001d000
W/dalvikvm( 3311): (Lcom/gibsson/basic/client/BasicActivity; had used a different Lcom/gibsson/basic/service/lib/BasicManager; during pre-verification)
D/AndroidRuntime( 3311): Shutting down VM
W/dalvikvm( 3311): threadid=1: thread exiting with uncaught exception (group=0x41891700)
E/AndroidRuntime( 3311): FATAL EXCEPTION: main
E/AndroidRuntime( 3311): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
E/AndroidRuntime( 3311):        at com.gibsson.basic.client.BasicActivity.<init>(BasicActivity.java:18)
E/AndroidRuntime( 3311):        at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 3311):        at java.lang.Class.newInstance(Class.java:1130)
E/AndroidRuntime( 3311):        at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
E/AndroidRuntime( 3311):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
E/AndroidRuntime( 3311):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
E/AndroidRuntime( 3311):        at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime( 3311):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
E/AndroidRuntime( 3311):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 3311):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 3311):        at android.app.ActivityThread.main(ActivityThread.java:5103)
E/AndroidRuntime( 3311):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3311):        at java.lang.reflect.Method.invoke(Method.java:525)
E/AndroidRuntime( 3311):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
E/AndroidRuntime( 3311):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime( 3311):        at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 2544):   Force finishing activity com.gibsson.basic.client/.BasicActivity

我了解到找到的 BasicManager dex 文件与其预期的不匹配。我验证了 AOSP 和 Android Studio 之间是否使用了相同版本的工具:两者都使用相同的 JDK (1.6.0.45) 和相同的编译版本 (18)。

最佳答案

开始工作:导入 BasicService Eclipse 项目似乎修改了 Dependencies 范围下拉菜单(在项目结构中)。我现在可以选择 Provided 而不是 Compile,并且应用程序运行完美。
从头开始创建新项目时,我只有以下选择:编译、运行时。

所以我查看了这两个项目和 build.gradle 之间的差异文件是唯一更改的文件:compileprovided 取代.

dependencies {
    provided files('libs/com.orthogone.canvas.service.lib.jar')
}

UI 中似乎存在一个错误,因为即使修改了 build.gradle,依赖项对话框也没有提供此选项。

另一个重要提示:AndroidManifest.xml 必须包含 <uses-library> <appliation>中的信息部分:

    <uses-library
        android:name="com.gibsson.basic.service.lib"
        android:required="true" />

关于安卓工作室 0.8.2 : project using an sdk add-on which provides a jar library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700422/

相关文章:

android - 异步任务完成后如何更改 Activity ?

java - Firebase 实时数据库 - 存储用户输入的多个节点

android - 在后台运行的服务中需要帮助

android - 他们怎么称呼android图形服务器?

android - 当应用程序关闭时,Kivy 服务停止

java - 无法通过一堆 URL(字符串数组)设置墙纸。如何解决这个问题?

android - 市场许可示例总是获得许可

java - Android Web 服务客户端 (JSON)

android - 如何在 Android Studio 中向现有项目添加新 Activity ?

android-studio - Android 4.4 或更低版本上的 java.lang.NoClassDefFoundError