最近得论坛高人指点正在做一个java --->service---> jni ---> HAL --->driver的一个应用。现在遇到一个瓶颈:我的hal模块在/hardware/目录下,经过编译形成so文件在out/.../system/lib/hw/*.sojni模块在framework/sevice/jni目录下,经过编译形成so文件在out/.../system/lib/*_runtime.soservice在framework/sevice/java目录下,经过编译形成jar文件在out/.../system/framework/*.jarjava应用程序中import了上述jar文件中的需要的类,编译和安装成功之后运行居然出现了找不到类定义的错误。
而这个找不到的类定义就在*.jar中,为什么编译能过,运行却找不到呢?我用adb shell进入了开发板的/system/framework目录看到这个jar文件存在(被编入镜像)。这个问题百思不得其解啊!!大家有没有啥经验,分享分享!!!
而这个找不到的类定义就在*.jar中,为什么编译能过,运行却找不到呢?我用adb shell进入了开发板的/system/framework目录看到这个jar文件存在(被编入镜像)。这个问题百思不得其解啊!!大家有没有啥经验,分享分享!!!
解决方案 »
- popupWindow弹出后,怎么才能让后面的Activity能够响应事件呢
- 找一篇基于android的移动学习终端的开发的外文
- android 中运行到new ObjectInputStream(sock.getInputStream());就抛异常了
- 把android中的linpng移植到windows mobile上
- 关于RadioGroup的使用
- 读联系人时模拟器有,但是读出来就是0条
- 大家Android与服务端连接,都用什么协议?
- 请问ndk-build里的make不支持.mk里文件名为*.c?
- Android fragment退出view时怎么设置退出动画?求救...
- Bmob_APP_KEY从哪看
- android 如何导出联系人
- 关于读取Android虚拟机多媒体文件的问题?
LOCAL_NO_STANDARD_LIBRARIES := true
是什么意思啊
是的,编译都过了!就是运行时候找不到,部分调试信息:D/installd( 830): DexInv: --- BEGIN '/system/app/Usb3g.apk' ---
D/dalvikvm( 1153): DexOpt: load 28ms, verify 29ms, opt 1ms
D/installd( 830): DexInv: --- END '/system/app/Usb3g.apk' (success) ---
W/dalvikvm( 1146): VFY: unable to find class referenced in signature (Lcom/seuic/server/Usb3gService;)
E/dalvikvm( 1146): Could not find class 'com.seuic.server.Usb3gService', referenced from method com.seuic.usb3g.Usb3g$1.onClick
W/dalvikvm( 1146): VFY: unable to resolve new-instance 17 (Lcom/seuic/server/Usb3gService;) in Lcom/seuic/usb3g/Usb3g$1;
D/dalvikvm( 1146): VFY: replacing opcode 0x22 at 0x0018
D/dalvikvm( 1146): Making a copy of Lcom/seuic/usb3g/Usb3g$1;.onClick code (84 bytes)
I/ActivityManager( 903): Displayed activity com.seuic.usb3g/.Usb3g: 882 ms (total 882 ms)
I/connect...( 1146): connect to 3g
I/Usb3gTest( 1146): Creat a new Usb3gService object.
D/AndroidRuntime( 1146): Shutting down VM
W/dalvikvm( 1146): threadid=3: thread exiting with uncaught exception (group=0x4001b160)
E/AndroidRuntime( 1146): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 1146): java.lang.NoClassDefFoundError: com.seuic.server.Usb3gService
E/AndroidRuntime( 1146): at com.seuic.usb3g.Usb3g$1.onClick(Usb3g.java:62)
E/AndroidRuntime( 1146): at android.view.View.performClick(View.java:2364)
E/AndroidRuntime( 1146): at android.view.View.onTouchEvent(View.java:4179)
E/AndroidRuntime( 1146): at android.widget.TextView.onTouchEvent(TextView.java:6543)
E/AndroidRuntime( 1146): at android.view.View.dispatchTouchEvent(View.java:3709)
E/AndroidRuntime( 1146): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 1146): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 1146): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 1146): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
E/AndroidRuntime( 1146): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
E/AndroidRuntime( 1146): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
E/AndroidRuntime( 1146): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
E/AndroidRuntime( 1146): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
E/AndroidRuntime( 1146): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
E/AndroidRuntime( 1146): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1146): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 1146): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 1146): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1146): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 1146): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 1146): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 1146): at dalvik.system.NativeStart.main(Native Method)
/dalvikvm( 1146): VFY: unable to find class referenced in signature (Lcom/seuic/server/Usb3gService;)
E/dalvikvm( 1146): Could not find class 'com.seuic.server.Usb3gService', referenced from method com.seuic.usb3g.Usb3g$1.onClick
你的应用中是不是调用了非标模块,
这里是'com.seuic.server.Usb3gService'(USB串口通信服务)
我的应用程序调用的是我自己写的服务也就是Usb3gService.java,这个类在/frameworks/base/service/java/com/seuic/server/JNI com_seuic_server_Usb3gService.cpp 在/frameworks/base/service/jni/目录下/frameworks/base/core/java/seuic/hardware目录下有IUsb3gService.aidl和Usb3gManager.java(服务的管理器,从SystemServer中得到服务:ServiceManager.getService("usb3g")))他们被编译成两个库,Jni被编译成.so库, 另外两个java类被编译成seuic.jar被上层应用调用Android.mk内容:LOCAL_PATH := $(call my-dir)# the library
# =============================================================
include $(CLEAR_VARS)LOCAL_SRC_FILES := \
$(call all-subdir-java-files)LOCAL_MODULE_TAGS := engLOCAL_MODULE := seuic#
#LOCAL_MODULE_CLASS := JAVA_LIBRARIES
#LOCAL_JAVA_LIBRARIES := android.policy
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LIBRARIES := core framework# AIDL
LOCAL_SRC_FILES += \
core/java/seuic/hardware/IUsb3gService.aidlinclude $(BUILD_JAVA_LIBRARY)# The JNI component
include $(CLEAR_VARS)
include $(call all-makefiles-under,$(LOCAL_PATH))
这个服务还没有加入到SystemManager里面就错了!
Usb3gService us = new Usb3gService();//这里就挂了,根本还没有可能加入到ServiceManager中 try {
ServiceManager.addService("usb3g", us);
} catch (RuntimeException e) {
Log.e("Usb3gSystemServer", "Start Usb3gService failed.");
}
这个【jar文件在out/.../system/framework/*.jar】这个应该不对吧呵呵
大虾,您说的CLASSPATH在哪里啊?怎么设啊?
你看我的Android.mk文件内容,不可能被包在service.jar中吧,应该是一个新的jar文件。
我在Android.mk的官方spec里面没有看到你说的这个宏啊,奇怪
还有你可以先在命令行设置一下CLASSPATH,然后在命令行用am start起你的Activiy试试看看。
include $(CLEAR_VARS)LOCAL_MODULE_TAGS := eng# Only compile source java files in this apk.
LOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_PACKAGE_NAME := Usb3gLOCAL_SDK_VERSION := current# Also link against our own custom library.
LOCAL_JAVA_LIBRARIES := seuic framework
# We need to assign platform key to use ServiceManager.addService.
LOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.seuic.usb3g">
<application android:label="Usb Three G">
<activity android:name="Usb3g">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name=".Usb3gSystemServer"
android:process=".Usb3gSystemServer" >
<intent-filter>
<action android:name="com.seuic.systemserver"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
</application>
</manifest>
D/dalvikvm( 1153): DexOpt: load 28ms, verify 29ms, opt 1ms
D/installd( 830): DexInv: --- END '/system/app/Usb3g.apk' (success) ---
W/dalvikvm( 1146): VFY: unable to find class referenced in signature (Lcom/seuic/server/Usb3gService;)
E/dalvikvm( 1146): Could not find class 'com.seuic.server.Usb3gService', referenced from method com.seuic.usb3g.Usb3g$1.onClick
W/dalvikvm( 1146): VFY: unable to resolve new-instance 17 (Lcom/seuic/server/Usb3gService;) in Lcom/seuic/usb3g/Usb3g$1;
D/dalvikvm( 1146): VFY: replacing opcode 0x22 at 0x0018
D/dalvikvm( 1146): Making a copy of Lcom/seuic/usb3g/Usb3g$1;.onClick code (84 bytes)
I/ActivityManager( 903): Displayed activity com.seuic.usb3g/.Usb3g: 882 ms (total 882 ms)
I/connect...( 1146): connect to 3g
I/Usb3gTest( 1146): Creat a new Usb3gService object.楼主的log信息中怎么会有Usb3gService 这样的服务需要运行呢?这个系统是楼主修改过之后的系统吧?如果是标准的系统,能编译通过就应该可以运行起来的。