1. 程式人生 > >android 反編譯打包出現java.lang.VerifyError錯誤的原因和解決

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

nvoke-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


    .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