我正在尝试构建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
这样,一切都在图像中构建并正常工作。
End of introduction
我从构建过程中删除了BasicClient包,我试图将这个客户端带到Android Studio,使用SDK,就像Android开发人员那样(他们无法访问AOSP)
通过遵循说明并使用此命令成功创建了basic_sdk_addon:
AOSP$ make PRODUCT-basic_sdk_addon-sdk_addon
我使用用户定义的回购在Android Studio中安装了加载项。在BasicClient项目中,我必须手动将.jar文件添加到app / libs文件夹,然后单击" Add as library"为了正确编译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)。
答案 0 :(得分:2)
让它工作:似乎导入BasicService Eclipse项目修改了Dependencies scope下拉菜单(在Project Structure中)。我现在可以选择提供而不是编译,并且应用程序可以正常运行。
从头开始创建新项目时,我只有以下选择:编译,运行时。
所以我查看了两个项目之间的差异,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" />