要打包給測試接奈,切換分支踢涌,然后打release包,成功序宦,然后運行睁壁,崩潰。在Bugly上看到崩潰的Log如下:
1 java.lang.ExceptionInInitializerError:
2 org.eclipse.paho.android.service.d.b(Unknown Source:358)
3 ......
4 Caused by:
5 java.util.MissingResourceException:Can't find bundle for base name org.eclipse.paho.client.mqttv3.internal.nls.logcat, locale zh_CN
6 java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1558)
7 java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1381)
8 java.util.ResourceBundle.getBundle(ResourceBundle.java:771)
9 org.eclipse.paho.a.a.b.c.a(Unknown Source:6)
10 org.eclipse.paho.a.a.g.<clinit>(Unknown Source:4)
11 org.eclipse.paho.android.service.d.b(Unknown Source:358)
12 org.eclipse.paho.android.service.d$b.onServiceConnected(Unknown Source:16)
13 android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1681)
14 android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1710)
15 android.os.Handler.handleCallback(Handler.java:790)
16 android.os.Handler.dispatchMessage(Handler.java:99)
17 android.os.Looper.loop(Looper.java:192)
18 android.app.ActivityThread.main(ActivityThread.java:6949)
19 java.lang.reflect.Method.invoke(Native Method)
20 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
21 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:817)
奇怪互捌,MQTT很早就加進(jìn)去了潘明,之前也發(fā)布過release包沒有問題的。
猜想是什么時候改了gradle或者混淆規(guī)則導(dǎo)致的秕噪,看log從上個OK的realse版本到現(xiàn)在為止钳降,確實更改過build.gradle,可能是這個引起的腌巾?
后續(xù)做了如下事情:
- 在最新分支打debug包(關(guān)閉混淆)遂填,運行OK
- 多種方式嘗試關(guān)閉MQTT的混淆(設(shè)置MQTT所在module minifyEnabled為false铲觉,添加不混淆MQTT相關(guān)類,在外部應(yīng)用module添加不混淆MQTT類)吓坚,打realse包撵幽,運行異常!礁击!
- 反編譯第一個OK的版本和最新打出來的異常版本對比盐杂,異常版本缺少相關(guān)的properties文件。證明混淆規(guī)則中只能保證相關(guān)的MQTTJava類不會被混淆客税,但是打包的時候不能保證保留相應(yīng)的properties文件况褪。
- 回退到第一次發(fā)布的版本,打realse包更耻,運行OK
- 回退到修改gradle的版本测垛,打release包,運行異常
- 回退到修改gradle的前一個版本秧均,打realse包食侮,運行異常!D亢(理論上锯七,應(yīng)該這里是OK的)
- 后續(xù)二分法嘗試了回退版本,并重新打包驗證誉己,怎么好像又可以運行了眉尸?有點凌亂!
最后巨双,checkout到最新版本噪猾,clean工程,重新打realse包筑累,運行OK8だ!慢宗!
結(jié)論:以后發(fā)布版本之前坪蚁,請先Clean!镜沽!