升級微信 5.3.1 版,執行時報錯,無法運行。

Bycodeant

升級微信 5.3.1 版,執行時報錯,無法運行。

今天有安卓系統的客戶反應在升級了新版的微信之後,變得無法執行了,實際查看之後,發現不同品牌裝置的表現並不一樣,HTC 的蝴蝶機(4.4)跟 ASUS(4.3)的都沒問題,果然大廠還是比較有保障的。

試著找出問題,發現錯誤是新版的微信 5.3.1 在載入 libwechatCrashForJni.so 這個庫文件時失敗報錯,這個部分的代碼跟 5.3 有不小的差距,引用了不同的加載方式所造成的錯誤,實際上這個庫文件跟5.3是一樣的,也存放在正確的位置上,但是 5.3.1 載入時就會出錯,
5.3 版就沒這問題。

由於不是每個裝置每個品牌都會出錯,所以無法完全歸罪於微信的開發人員(只能說有部分是),但可以確定的是製造商肯定有進步的空間,因為有人做到了。

為什麼同樣的代碼會出現不同的結果呢 ??
怎麼解這問題呢 ??

有興趣的人可以自己試試唄。

錯誤訊息如下 :

D/dalvikvm( 1368): Trying to load lib /mnt/asec/com.tencent.mm-2/lib/libstlport_shared.so 0x418c3280 D/dalvikvm( 1368): Shared lib '/mnt/asec/com.tencent.mm-2/lib/libstlport_shared.so' already loaded in same CL 0x418c3280 W/dalvikvm( 1368): Exception Ljava/lang/NullPointerException; thrown while initializing Lcom/tencent/mm/app/f; D/AndroidRuntime( 1368): Shutting down VM W/dalvikvm( 1368): threadid=1: thread exiting with uncaught exception (group=0x415fdb90) E/AndroidRuntime( 1368): FATAL EXCEPTION: main E/AndroidRuntime( 1368): Process: com.tencent.mm, PID: 1368 E/AndroidRuntime( 1368): java.lang.ExceptionInInitializerError E/AndroidRuntime( 1368):        at com.tencent.mm.app.WorkerProfile.ia(SourceFile:307) E/AndroidRuntime( 1368):        at com.tencent.mm.app.e.run(SourceFile:109) E/AndroidRuntime( 1368):        at android.os.Handler.handleCallback(Handler.java:733) E/AndroidRuntime( 1368):        at android.os.Handler.dispatchMessage(Handler.java:95) E/AndroidRuntime( 1368):        at android.os.Looper.loop(Looper.java:136) E/AndroidRuntime( 1368):        at android.app.ActivityThread.main(ActivityThread.java:5017) E/AndroidRuntime( 1368):        at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 1368):        at java.lang.reflect.Method.invoke(Method.java:515) E/AndroidRuntime( 1368):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) E/AndroidRuntime( 1368):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) E/AndroidRuntime( 1368):        at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 1368): Caused by: java.lang.NullPointerException E/AndroidRuntime( 1368):        at com.tencent.mm.app.f.(SourceFile:46) E/AndroidRuntime( 1368):        ... 11 more I/ActivityManager(  430): Displayed com.tencent.mm/.ui.LauncherUI: +828ms W/ActivityManager(  430):   Force finishing activity com.tencent.mm/.ui.LauncherUI

 

從下面的代碼,可以看出實作上的不同:

微信 5.3 版本 (5.3.0.96_r722426) :

public static void ap(String paramString) { 	g localg = new g(); 	ak.getContext(); 	localg.hL(); 	b.a(localg); 	localg.aq(paramString); 	m.ca("wechatCrashForJni"); }

 

微信 5.3.1 版本 (5.3.1.50_r732663) :

public static boolean ao(String paramString) { 	cxY = paramString; 	try 	{ 		c localc = (au)Class.forName("com.tencent.mm.crash.RDMCrashReporter").newInstance(); 		ak.getContext(); 		localc.hL(); 		bf.dfB.y("last_login_uin", cxX); 		b.a(localc); 		new g(); 		bool = true; 		return bool; 	} 	catch (Exception localException) 	{ 		while (true) 		{ 			y.w("mC", "rdm crash reporter load failed"); 			f localf = new f(); 			ak.getContext(); 			localf.hL(); 			b.a(localf); 			m.bY("wechatCrashForJni"); 			boolean bool = false; 		} 	} }

 

About the author

codeant administrator

Leave a Reply