android 反編譯打包出現java.lang.VerifyError錯誤的原因和解決
在安卓開發中經常要用到逆向工程,所以需要反編譯修改程式碼然後再重新打包。有時候會出現如下錯誤
java.lang.VerifyError: Rejecting class com.samsung.android.sdk.cup.Scup because it failed compile-time verification (declaration of 'com.samsung.android.sdk.cup.Scup' appears in
出現這種錯誤的原因是在smail檔案中修改程式碼的時候把程式碼改錯了,造成了語法不正確。
比如以下程式碼
.line 282
.local v9, "in":Ljava/io/InputStream;
:try_start_0
i
move-result-object v15
const-string v16, "db.jpg"
invoke-virtual/range {v15 .. v16}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
move-result-object v9
.line 283
new-instance v13, Landroid/graphics/BitmapFactory$Options;
如果你想刪掉上面紅色部分的程式碼,那麼你不能單單刪除這部分程式碼。因為他的呼叫結果傳給了v15,而且v15又在
invoke-virtual/range
{v15 .. v16}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
中被呼叫。所以要刪除掉下面一大段
invoke-virtual/range
{p0 .. p0}, Lcom/example/shuowandemo/MainActivity;->getAssets()Landroid/content/res/AssetManager;
move-result-object v15
const-string v16, "db.jpg"
invoke-virtual/range {v15 .. v16}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
move-result-object v9