Android混淆後運行程式出現異常:Missing type parameter

來源:互聯網
上載者:User

對程式進行混淆,打包發布版apk,再用真機對該發布版apk進行測試,發現所有有網路請求的頁面都無法顯示出資料,查看log,發現如下異常:


<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+zfjJz7Lpwcuy6Q=="Missing type parameter"這個問題到底是什麼原因引起的,可以看到這樣的回答因為程式中用到了gson的new typeToken。那應該是在混淆的檔案裡對typetoken相關的類做了混淆,導致運行時程式不能識別。看的

at com a.a.c.a.a(Unknown Source)這個應該就是被混淆的不能識別的類。為了進一步證實,還是查看下混淆後產生的檔案mapping.txt來找出混淆後的類com a.a.c.a.a對應的是程式中的哪個類,如:



可以確定是指向了com.google.gson.reflect.TypeToken


然後就在混淆檔案裡proguard-android.txt(我在Android Studio0.3.7上用的該txt對程式進行混淆,很多以往的項目都是在proguard.cfg裡)加上這句話:

-keep class com.google.gson.** {*;} 表示對該類不執行proguard操作


網上也可查到很多解決辦法,例如下面兩個

android混淆編譯——問題匯總 和stackoverflow上的 proguard Missing type parameter

在 proguard.cfg中添加

-dontobfuscate
-dontoptimize

或者添加:

# Gson uses generic type information stored in a class file when working with fields. Proguard# removes such information by default, so configure it to keep all of it.-keepattributes Signature# Gson specific classes-keep class sun.misc.Unsafe { *; }#-keep class com.google.gson.stream.** { *; }# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.examples.android.model.** { *; }

但是這樣配置後,打包發布版的apk後運行還是出現同樣的錯誤,問題並沒有解決。


糾結過後,想想問題既然出在混淆了不該混淆的類上,而且是在進行擷取網路資料時報錯的,又已經排除了TypeToken類被混淆導致的問題(已經寫了-keep class com.google.gson.** {*;}還出現Missing Type patamerer的問題),那應該是程式在執行到TypeToken之前就遇到了被混淆的類,查看程式中擷取網路資料並進行json格式轉換操作的相關代碼,發現:

在擷取介面資料的模組中引用了org.json下的類,但proguard-android.txt中沒有對這部分類做保留操作。

在proguard-android.txt中加入:

-keep classorg.json.** {*;}

再打包發布版的apk,運行正常,問題解決啦!




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.