Android和放大器; JNI_OnLoad导致对设备崩溃 [英] Android & JNI_OnLoad lead to a crash on device

查看:223
本文介绍了Android和放大器; JNI_OnLoad导致对设备崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是pretty新用JNI在Android上工作,我一直在写,需要JNI_OnLoad执行的应用程序。我已经详细阅读求助互联网,这似乎是一个很大的不同文件冲突在这个功能应该如何实现。尽管如此,我去,似乎对我的模拟器,但不是我的设备上工作的方法。

I am pretty new to working with JNI on Android, and I've been writing an app that requires the implementation of JNI_OnLoad.. I've perused the internet for help, and it seems like a lot of different documents conflict in how this function should be implemented. Nevertheless, I went with a method that seemed to work on my emulator but not on my device.

LogCat中产生以下内容:

LogCat produces the following:

D/dalvikvm(11317): Trying to load lib /data/app/libHelloAndroid.so 0xb6db9f50
D/dalvikvm(11317): Added shared lib /data/app/libHelloAndroid.so 0xb6db9f50
I/DEBUG   ( 1244): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 1244): Build fingerprint: 'generic/mfld_cdk/mfld_cdk:2.3.3/GRI40/eng.gerrit2.20110607.120237:eng/test-keys'
I/DEBUG   ( 1244): pid: 11317, tid: 11317  >>> com.example.helloandroid <<<
I/DEBUG   ( 1244): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000001
I/DEBUG   ( 1244):  eax 09353b90  ebx 8293910c  ecx 00000300  edx 00000001
I/DEBUG   ( 1244):  esi 094313e0  edi 84400395
I/DEBUG   ( 1244):  xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000 xss 0000007b
I/DEBUG   ( 1244):  eip 8440039d  ebp bf859e70  esp bf859e00  flags 00010206
I/DEBUG   ( 1244): #00 
I/DEBUG   ( 1244):     eip: 8440039d  /data/app/libHelloAndroid.so (JNI_OnLoad)
I/DEBUG   ( 1244): #01 
I/DEBUG   ( 1244):     eip: 828a8df9  /system/lib/libdvm.so (Dalvik_java_lang_Runtime_nativeLoad)
I/DEBUG   ( 1244): #02 
I/DEBUG   ( 1244):     eip: 82831cd9  /system/lib/libdvm.so
I/DEBUG   ( 1244): #03 
I/DEBUG   ( 1244):     eip: b680ec7c  
I/DEBUG   ( 1244): #04 
I/DEBUG   ( 1244):     eip: 0004011a  
I/DEBUG   ( 1244): #05 
I/DEBUG   ( 1244):     eip: ffffffff  
I/DEBUG   ( 1244): #06 
I/DEBUG   ( 1244):     eip: ffffffff  
I/DEBUG   ( 1244): #07 
I/DEBUG   ( 1244):     eip: ffffffff  
I/DEBUG   ( 1244): stack: 
I/DEBUG   ( 1244): #00 
I/DEBUG   ( 1244):     bf859e00  a901b083  
I/DEBUG   ( 1244):     bf859e04  8287da14  /system/lib/libdvm.so (dvmLoadNativeCode)
I/DEBUG   ( 1244):     bf859e08  09353b90  [heap] (dvmLoadNativeCode)
I/DEBUG   ( 1244):     bf859e0c  00000000   (dvmLoadNativeCode)
I/DEBUG   ( 1244):     bf859e10  8291f9bf  /system/lib/libdvm.so
I/DEBUG   ( 1244):     bf859e14  094313e0  [heap]
I/DEBUG   ( 1244):     bf859e18  b6db9f50  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   ( 1244):     bf859e1c  8293910c  /system/lib/libdvm.so
I/DEBUG   ( 1244):     bf859e20  bf859e70  [stack]
I/DEBUG   ( 1244):     bf859e24  82888b77  /system/lib/libdvm.so (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     bf859e28  0000001d   (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     bf859e2c  bf859ea0  [stack] (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     bf859e30  b632ea84  /dev/ashmem/dalvik-LinearAlloc (deleted) (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     bf859e34  00000001   (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     bf859e38  00000000   (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     bf859e3c  09431418  [heap] (dvmCreateCstrFromString)
I/DEBUG   ( 1244):     ......  ......  
I/DEBUG   ( 1244): #01 
I/DEBUG   ( 1244):     bf859e74  828a8df9  /system/lib/libdvm.so (Dalvik_java_lang_Runtime_nativeLoad)
I/DEBUG   ( 1244):     bf859e78  094313e0  [heap] (Dalvik_java_lang_Runtime_nativeLoad)
I/DEBUG   ( 1244):     bf859e7c  b6db9f50  /dev/ashmem/dalvik-heap (deleted) (Dalvik_java_lang_Runtime_nativeLoad)
I/DEBUG   ( 1244):     bf859e80  bf859e94  [stack] (Dalvik_java_lang_Runtime_nativeLoad)
I/DEBUG   ( 1244):     bf859e84  b55611c2  /data/dalvik-cache/data@app@com.example.helloandroid-2.apk@classes.dex (Dalvik_java_lang_Runtime_nativeLoad)
I/DEBUG   ( 1244):     bf859e88  8289ac09  /system/lib/libdvm.so (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859e8c  8293910c  /system/lib/libdvm.so (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859e90  bf859eb0  [stack] (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859e94  00000000   (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859e98  b680ec3c   (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859e9c  b680eb78   (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859ea0  094314e0  [heap] (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859ea4  00000020   (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859ea8  b5fa27fc  /data/dalvik-cache/system@framework@core.jar@classes.dex (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859eac  b680ec24   (dvmGetCaller2Class)
I/DEBUG   ( 1244):     bf859eb0  bf859f50  [stack] (dvmGetCaller2Class)
I/DEBUG   ( 1244):     ......  ......  
I/DEBUG   ( 1244): #02 
I/DEBUG   ( 1244):     bf859eb4  82831cd9  /system/lib/libdvm.so
I/DEBUG   ( 1244):     bf859eb8  b680ec04  
I/DEBUG   ( 1244):     bf859ebc  bf859f58  [stack]
I/DEBUG   ( 1244):     bf859ec0  b63f8f60  /dev/ashmem/dalvik-LinearAlloc (deleted)
I/DEBUG   ( 1244):     bf859ec4  09355e68  [heap]
I/DEBUG   ( 1244):     bf859ec8  b6dbcfa8  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   ( 1244):     bf859ecc  09355e68  [heap]
I/DEBUG   ( 1244):     bf859ed0  b680ebec  
I/DEBUG   ( 1244):     bf859ed4  09355e68  [heap]
I/DEBUG   ( 1244):     bf859ed8  bf859f4c  [stack]
I/DEBUG   ( 1244):     bf859edc  00000000  
I/DEBUG   ( 1244):     bf859ee0  82c03d68  
I/DEBUG   ( 1244):     bf859ee4  00002000  
I/DEBUG   ( 1244):     bf859ee8  bf859e14  [stack]
I/DEBUG   ( 1244):     bf859eec  bf859f50  [stack]
I/DEBUG   ( 1244):     bf859ef0  bf859f50  [stack]
I/DEBUG   ( 1244):     ......  ......  
I/DEBUG   ( 1244): #03 
I/DEBUG   ( 1244): #04 
I/DEBUG   ( 1244):     b5560980  0004011a  
I/DEBUG   ( 1244):     b5560984  00022071  
I/DEBUG   ( 1244):     b5560988  001a0010  
I/DEBUG   ( 1244):     b556098c  10710001  
I/DEBUG   ( 1244):     b5560990  00000027  
I/DEBUG   ( 1244):     b5560994  0034001a  
I/DEBUG   ( 1244):     b5560998  0035011a  
I/DEBUG   ( 1244):     b556099c  00022071  
I/DEBUG   ( 1244):     b55609a0  000e0010  
I/DEBUG   ( 1244):     b55609a4  00010002  
I/DEBUG   ( 1244):     b55609a8  00000002  
I/DEBUG   ( 1244):     b55609ac  00001358  
I/DEBUG   ( 1244):     b55609b0  0000000b  
I/DEBUG   ( 1244):     b55609b4  00001070  
I/DEBUG   ( 1244):     b55609b8  00220001  
I/DEBUG   ( 1244):     b55609bc  2070000c  
I/DEBUG   ( 1244):     ......  ......  
I/DEBUG   ( 1244): #05 
I/DEBUG   ( 1244): #06 
I/DEBUG   ( 1244): #07 

以下是我的JNI_OnLoad执行...

The following is my JNI_OnLoad implementation...

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{

    LOGI("Executing JNI_OnLoad");


    JNIEnv *env;
    jint onLoad_err = -1;
    jclass k;
    static const char* const strClassName="com/example/helloandroid/HelloAndroid";

    cached_jvm = vm;

    // Checks JNI version
    if((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK){
        LOGE("JNI Check failure");
        return onLoad_err;
    }

    // Checks if environment is null
    if (env == NULL) {
        LOGE("Env is NULL");
        return onLoad_err;
    }

    k = (*env)->FindClass(env, strClassName);
    if(k == NULL){
        LOGE("Find Class returns NULL");
        return onLoad_err;
    }

    if ((*env)->RegisterNatives(env, k, methods, sizeof(methods)/sizeof(methods[0])) != JNI_OK){
        LOGE("Method registration failure");
        return onLoad_err;
    }

    LOGI("Successfully executed JNI_onLoad");
    return JNI_VERSION_1_4;
}

有没有具体的对本土code,使得它采取不同的模拟器上比在实际设备上的东西吗?或做我需要做更多的JNI_OnLoad?

Is there something specific about native code that makes it act differently on an emulator than on an actual device? Or do I need to do more in JNI_OnLoad?

在此先感谢!

推荐答案

有什么你应该需要做的到是不是已经在模拟器上做了设备上运行。

There's nothing you should need to do to run on a device that isn't already done on the emulator.

我从你的日志你的设备是一个x86类型的设备发现。仿真器是ARM​​处理器...你想你的设备上运行ARM code或x86 code?

I notice from your log that your device is an x86 type device. The emulator is an ARM processor... are you trying to run ARM code or x86 code on your device?

这篇关于Android和放大器; JNI_OnLoad导致对设备崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆