我正在尝试构建一个 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
之间的差异文件是唯一更改的文件:compile
被 provided
取代.
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/