天天看點

Android上程序閃退,讀取Manifest.xml配置檔案出錯

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();