在我的項目中,本地庫使用反射回調Java代碼。所以我也跟着this線程,並添加了以下到的ProGuard-project.txt啓用proguard後致命信號11(SIGSEGV)
-keep class com.example.abc.MainActivity { *; }
-keep class com.example.abc.NativeClass { *; }
保持在NativeClass哪裏的本地方法調用的所有方法和字段(其中所有的本地方法的聲明)和Mainactivity。在這些本地方法中,再次調用NativeClass.java方法(純java方法),後者又調用Mainactivity.java中定義的java方法。該應用程序運行良好,沒有proguard。但是,通過啓用proguard導出項目之後,應用程序在本地方法調用(它們又調用NativeClass中的java方法)的地方崩潰了。我已經嘗試了所有可能的命令進入proguard-project.txt無濟於事。 OpenCV方法在本地代碼中調用。啓用proguard時應該如何處理OpenCV本機代碼。請幫忙。
以下是從墓碑文件記錄
/data/data/com.example.imageanalyse/lib/libfilters.so
be98d7a0 0000f2b8 [heap]
be98d7a4 be98d7b4 [stack]
be98d7a8 56d47798 /dev/ashmem/dalvik-LinearAlloc (deleted)
be98d7ac 5bdb9d6b /data/data/com.example.imageanalyse/lib/libfilters.so
be98d7b0 00000000
be98d7b4 00000000
--------- tail end of log /dev/log/main
09-25 15:20:56.930 3356 3357 D dalvikvm: GC_CONCURRENT freed 18K, 48% free 20256K/38855K,
paused 2ms+8ms
09-25 15:20:56.980 3356 3356 D dalvikvm: GC_FOR_ALLOC freed 5120K, 58% free 16405K/38855K,
paused 22ms
09-25 15:20:57.030 3356 3356 D dalvikvm: GC_FOR_ALLOC freed 1278K, 58% free 16449K/38855K,
paused 22ms
09-25 15:20:57.070 3356 3356 D dalvikvm: GC_FOR_ALLOC freed 1269K, 58% free 16449K/38855K,
paused 22ms
09-25 15:20:57.090 3356 3356 F libc : Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1)
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
這可以幫助你。 http://stackoverflow.com/questions/7880107/in-proguard-how-to-preserve-a-set-of-classes-method-names 試試看並發表評論 – CaptainTeemo 2014-09-25 06:11:04
@CaptainTeemo我已經嘗試添加所有這些條目在proguard-project.txt中。但是不保存類com.example.abc.NativeClass {*; }單獨保留NativeClass的所有方法和字段?我認爲問題在於調用opencv方法。因爲即使那些沒有回調java方法的本地方法,也無法執行。該應用程序也在那裏崩潰。順便說一句,感謝您的幫助。 – 2014-09-25 07:46:16
這個類是不是調用了其他類的「-keep」類?順便說一句,LogCat會很酷。如果您無法找到可能位於標記DEBUG下的所有消息過濾器中的消息。 – CaptainTeemo 2014-09-25 08:08:15