android 5.x+上的NDK崩溃;用callstatic方法
我的jni代码如下:android 5.x+上的NDK崩溃;用callstatic方法,android,c++,android-ndk,Android,C++,Android Ndk,我的jni代码如下: 在android 5.x上工作正常,但在android 5.x+上出现崩溃, 我的NDK版本是NDK-r8b void vSendAVDataToJavaLayer(uint8_t *pAudioData, int dwAudioDataLen, int dwFrames, int64_t u64APTS, uint8_t *pVideoData, int dwVideoLen, int64_t u64VPTS) { if(mJvm !=
在android 5.x上工作正常,但在android 5.x+上出现崩溃,
我的NDK版本是NDK-r8b void vSendAVDataToJavaLayer(uint8_t *pAudioData, int dwAudioDataLen, int dwFrames, int64_t u64APTS, uint8_t *pVideoData, int dwVideoLen, int64_t u64VPTS) { if(mJvm != NULL && fgHasInit) { JNIEnv *env = NULL; mJvm->AttachCurrentThread(&env, NULL); if(env != NULL) { int TmpLen = dwAudioDataLen; if(TmpLenNewByteArray(TmpLen); env->SetByteArrayRegion(jAudioarray, 0, TmpLen, AudioByteData); TmpLen = dwVideoLen; if(TmpLenNewByteArray(TmpLen); env->SetByteArrayRegion(jVideoArray, 0, TmpLen, VideoByteData); env->CallStaticVoidMethod(mClass, fields.post_AVdata, AudioByteData, dwAudioDataLen, dwFrames,u64APTS, jVideoArray,dwVideoLen,u64VPTS ); } mJvm->DetachCurrentThread(); } }
首先,为什么要使用非常旧的NDK版本?当前的一个是R10e,即使是那个也有很长一段时间没有更新。这个mClass…您是否使用
env->NewGlobalRef(env->FindClass(…)
来设置它?
I/DEBUG(2873): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-24 16:16:51.560: I/DEBUG(2873): Build fingerprint: 'HONOR/PLK-AL10/HWPLK:5.0.2/HONORPLK-AL10/C00B188:user/release-keys'
12-24 16:16:51.560: I/DEBUG(2873): Revision: '0'
12-24 16:16:51.560: I/DEBUG(2873): ABI: 'arm'
12-24 16:16:51.560: I/DEBUG(2873): pid: 25316, tid: 25436, name: Thread-1436 >>> com.yoosee (art::mirror::Class*)+37)
12-24 16:16:51.580: I/DEBUG(2873): #01 pc 00072877 /system/lib/libart.so (art::CheckMethodArguments(art::mirror::ArtMethod*, unsigned int*)+398)
12-24 16:16:51.580: I/DEBUG(2873): #02 pc 00224c1b /system/lib/libart.so (art::InvokeWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+442)
12-24 16:16:51.580: I/DEBUG(2873): #03 pc 0019d949 /system/lib/libart.so (art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+312)
12-24 16:16:51.580: I/DEBUG(2873): #04 pc 000bd5a3 /system/lib/libart.so (art::CheckJNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+102)
12-24 16:16:51.580: I/DEBUG(2873): #05 pc 00027645 /mnt/asec/com.yoosee-2/lib/arm/libmediaplayer.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+20)
12-24 16:16:51.580: I/DEBUG(2873): #06 pc 0002790b /mnt/asec/com.yoosee-2/lib/arm/libmediaplayer.so (vSendAVDataToJavaLayer(unsigned char*, int, int, long long, unsigned char*, int, long long)+198)
12-24 16:16:51.580: I/DEBUG(2873): #07 pc 0002702b /mnt/asec/com.yoosee-2/lib/arm/libmediaplayer.so
12-24 16:16:51.580: I/DEBUG(2873): #08 pc 0022141f /mnt/asec/com.yoosee-2/lib/arm/libmediaplayer.so
12-24 16:16:51.580: I/DEBUG(2873): #09 pc 00015e83 /system/lib/libc.so (__pthread_start(void*)+30)
12-24 16:16:51.580: I/DEBUG(2873): #10 pc 00013f43 /system/lib/libc.so (__start_thread+6)
12-24 16:16:51.770: W/AudioFlinger(3032): RecordThread: buffer overflow
12-24 16:16:51.980: E/Thermal-daemon(2894): [ap] temp_new :35 temp_old :34
12-24 16:16:52.000: I/AudioFlinger(3032): BUFFER TIMEOUT: remove(4097) from active list on thread 0xab1b88c0
12-24 16:16:52.010: I/DEBUG(2873): Tombstone written to: /data/tombstones/tombstone_06
12-24 16:16:52.020: I/AudioPolicyManager(3032): stopOutput() output 2, stream 3, session 69
12-24 16:16:52.020: I/AudioPolicyManager(3032): getNewOutputDevice() selected device 0
12-24 16:16:52.020: I/AudioPolicyManager(3032): setOutputDevice() output 2 device 0x0000 delayMs 40
12-24 16:16:52.020: I/AudioPolicyManager(3032): setOutputDevice() prevDevice 0x0002
12-24 16:16:52.020: I/AudioPolicyManager(3032): isStreamActive() stream 3 inPastMs 5000
12-24 16:16:52.020: I/AudioPolicyManager(3032): setOutputDevice() setting same device 0x0000 or null device for output 2
12-24 16:16:52.020: I/AudioPolicyManager(3032): isStreamActive() stream 3 inPastMs 5000
12-24 16:16:52.020: I/AudioPolicyManager(3032): isStreamActive() stream 3 inPastMs 5000