1. 程式人生 > >使用jni生成so檔案後打包失敗問題Binary XML file line #215: Binary XML file line #215

使用jni生成so檔案後打包失敗問題Binary XML file line #215: Binary XML file line #215

使用jni生成so檔案後打包失敗問題

報錯:

在對專案進行混淆打包後,出現以下報錯:Unable to start activity ComponentInfo{com.infoearth.yfb.unmannedaerialvehicleappas/com.infoearth.yfb.unmannedaerialvehicleappas.MainActivity}: android.view.InflateException: Binary XML file line #215: Binary XML file line #215: Error inflating class common.BaseFpvView

原因與解決方案:

1.在使用了自定義View中沒有實現如下三種構造方法,

   public MyView(Context context, AttributeSet attrs) {
       super(context, attrs);
   }

   public MyView(Context context) {
       super(context);
   }

   public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
       super(context,
attrs, defStyleAttr); }

2.在自定義中使用了so檔案或呼叫了使用so檔案對應的類 build.gradle中的packagingOptions沒有加入你的so檔案,如下加入你的so檔案:

packagingOptions {
       doNotStrip "*/*/libdjivideo.so"
       doNotStrip "*/*/libffmpeg.so"
   }

3.我發現上面方法都不管用,我試著把混淆關閉,再生成apk,在用的過程中卻沒有這個錯誤,開啟混淆卻有報錯,如下解決: (1)找到對應使用so檔案的類

public native boolean release
(); static{ System.loadLibrary("ffmpeg"); System.loadLibrary("djivideojni"); }
-keep class common.** { *; }
//common是我自己包名,替換成你自己的包名即可

這樣就可以了;