高徳地図を解決して混同を開いた後releaseはMarkerを表示しません

1594 ワード

地図とロケーションSDKを使用しましたが、不思議なことに、私は高徳ドキュメントに従って混同構成を追加しました.
	 #3D    V5.0.0  :
	-keep   class com.amap.api.maps.**{*;} 
	-keep   class com.autonavi.**{*;} 
	-keep   class com.amap.api.trace.**{*;}

	 #  
	-keep class com.amap.api.location.**{*;}
	-keep class com.amap.api.fence.**{*;}
	-keep class com.autonavi.aps.amapapi.model.**{*;}

アプリの運行時、位置付けと地図機能はすべて正常で、Markerだけは表示できなくて、Logは以下のように表示します:
java.lang.NullPointerException: Attempt to read from field 'boolean h.a.a.a.a.t9.i' on a null object reference

このh.a.a.a.t 9を混同したためだと思っていましたが、mappingファイルを通じて混同前のクラスを見つけました.
com.amap.api.mapcore.util.x -> h.a.a.a.a.t9:

このutilパッケージの下にあるすべてのクラスが混同に関与しないことを無視した後.releaseの後にまた次のようなエラーが報告されましたが、これは前のエラーの翻版ではありませんか??
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.amap.api.mapcore.util.x.a()' on a null object reference

他にも2つのエラーがあります.空のポインタにすぎません.上記のエラーに似ていません.私は異常な情報に従って高徳SDK対応のソースコードを見て、非空判断はすべてして、この異常を報告することは不可能です.またdebugバージョンには異常はありません.次に解決策を述べる
解決する
ソースコードに問題がない以上、混同も無視しているのに、なぜ使えないのか、ProGuardにはコード最適化の機能があるため、いくつかの混同コマンドが原因であることを考慮します.コードとリソースの最適化による空のポインタの可能性があります.ProGuardの公式サイトのドキュメントで、役に立つように見えるコマンドを探しました.最後に、コマンドを解決しました.
#          。     ,ProGuard       。           ,             。
-dontoptimize

最適化をオフにすると問題が解決し、release後Markerは正常に表示され、私は前後者のApkを逆コンパイルしました.多分、前者の可読性がもっと悪いのではないでしょうか.問題は解決しましたが、コードの可読性がよくなったら、なくしてしまいます.これは私たちが望んでいないことです.2つ目はapkが数百kb大きくなることです.
もう少し細かく位置決めできればいいのですが