我正在尝试构建一个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程序包,并试图将此客户端与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范围下拉菜单(在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" />