Android上程序閃退,都是在jni調用java代碼處異常
09-12 09:50:43.368: I/DEBUG(20447): #00 pc 000568de /system/lib/libdvm.so (dvmCreateCstrFromString(StringObject const*)+29)
09-12 09:50:43.368: I/DEBUG(20447): #01 pc 0004c375 /system/lib/libdvm.so
09-12 09:50:43.368: I/DEBUG(20447): #02 pc 002153eb /data/app-lib/com.cldeer.bubblebear-1/libbubblebear.so (ClientInterfaceAndroid::getUMengChannel()+70)
09-12 09:50:43.368: I/DEBUG(20447): #03 pc 002156bd /data/app-lib/com.cldeer.bubblebear-1/libbubblebear.so (ClientOnlineCfg::getWebCfgByName(char const*)+44)
09-12 09:50:43.368: I/DEBUG(20447): #04 pc 001c6b8d /data/app-lib/com.cldeer.bubblebear-1/libbubblebear.so (AppDelegate::applicationDidFinishLaunching()+92)
09-12 09:50:43.368: I/DEBUG(20447): #05 pc 00251ad3 /data/app-lib/com.cldeer.bubblebear-1/libbubblebear.so (cocos2d::CCApplication::run()+6)
09-12 09:50:43.368: I/DEBUG(20447): #06 pc 001c3479 /data/app-lib/com.cldeer.bubblebear-1/libbubblebear.so (Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit+108)
排查一:
前面以更換包名的版本編譯過,随便修改一下main.cpp然後重新編譯,問題沒解決
排查二:
還是懷疑包名的問題,修改jni中包名為錯誤包名,對比出錯内容,報錯内容不同。不過對定位沒有幫助
排查三:
關鍵地方列印日志資訊,
public static String getDeviceToken() {
Log.e("=======", "==================================kkkkkkkkkkkkkkkkk");
String xx = sCldComm.getDeviceInfo2();
Log.e("=======", "==========================" + xx);
return xx;
}
發現下面異常資訊
09-12 10:45:20.654: D/UmJniHelper(26074): Failed to find class of com/umeng/analytics/MobclickAgent
09-12 10:45:20.654: D/UmJniHelper(26074): Failed to find static method id of onResume
09-12 10:45:20.654: D/UmJniHelper(26074): Failed to find class of com/umeng/analytics/MobclickAgent
09-12 10:45:20.654: D/UmJniHelper(26074): Failed to find static method id of updateOnlineConfig
09-12 10:45:20.654: W/dalvikvm(26074): Exception thrown (Ljava/lang/NoClassDefFoundError;) while throwing internal exception (Ljava/lang/NoSuchMethodError;)
09-12 10:45:20.654: D/JniHelper(26074): Failed to find static method id of getUMengChannelxxxxx
09-12 10:45:20.654: E/=======(26074): ==================================kkkkkkkkkkkkkkkkk
09-12 10:45:20.654: E/dalvikvm(26074): JNI ERROR (app bug): accessed stale local reference 0x3d (index 15 in a table of size 5)
09-12 10:45:20.654: E/dalvikvm(26074): VM aborting
在java函數裡面出的問題,并不是jni調用間的問題,最終跟蹤getDeviceInfo2函數定位到問題處
ApplicationInfo appInfo;
appInfo = pm.getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA);
//String value = appInfo.metaData.getString(name);
// Manifest.xml中配置會轉為Bundle結構,而該結構有類型差別。數字類型值預設轉為int
// 這裡使用getString導緻最終失敗
// 最新修改是先擷取Object對象,然後通過toString轉化
Object obj = appInfo.metaData.get(name);
return obj.toString();