我已經實現了一個JNI android應用程序。此應用程序需要將一些額外的「共享庫」作爲APK的一部分進行打包。使用Ecplise,我已經將這些庫添加到項目的'/ libs/armeabi'文件夾中。Android JNI APK包裝
但是,當啓動應用程序(通過集成調試器)時,我添加的'Shared Libs'從'armeabi'文件夾中刪除。
- 如何防止這些額外的庫被刪除?
- 如何確保APK中包含其他必需的SO?
我已經實現了一個JNI android應用程序。此應用程序需要將一些額外的「共享庫」作爲APK的一部分進行打包。使用Ecplise,我已經將這些庫添加到項目的'/ libs/armeabi'文件夾中。Android JNI APK包裝
但是,當啓動應用程序(通過集成調試器)時,我添加的'Shared Libs'從'armeabi'文件夾中刪除。
您不需要自己將此庫複製到libs
文件夾。這項工作應該由ndk-build
完成。
這兩個步驟應該足夠:
創建mylibs
(你可以使用任何其他名稱代替)文件夾在項目的根目錄。把你的庫放到這個文件夾中。
對於每個庫的include $(CLEAR_VARS)
聲明與您庫名稱替換mylib
前加上下面幾行:
include $(CLEAR_VARS)
LOCAL_MODULE:=mylib
LOCAL_SRC_FILES:=../mylibs/libmylib.so
include $(PREBUILT_SHARED_LIBRARY)
(您可能需要爲LOCAL_SRC_FILES
稍有不同的路徑這取決於你的Eclipse配置。 )
在此上下文中添加的另一個注意事項是,外部SharedLib的路徑必須與jni目錄(或任何特定的@ LOCAL_PATH)相關,即「LOC AL_SRC_FILES:= ../../../Android/ffmpeg/libavcodec/libavcodec.so「將工作在絕對路徑不會的地方。
完成上述操作後,這就是我在構建過程中得到的結果:ndroid NDK:jni/Android.mk:swscale:LOCAL_MODULE_FILENAME不應包含文件擴展名 Android NDK:錯誤:jni/Android.mk:swscale:LOCAL_SRC_FILES應指向以「.a」結尾的文件。 – NadavRub 2012-02-01 20:16:42
已修復。應該有'PREBUILT_SHARED_LIBRARY'而不是'PREBUILT_STATIC_LIBRARY'。 – 2012-02-02 11:54:19