Sas*_*lic 7 java-native-interface android shared-libraries android-ndk
我有一个共享库libfoo.so,需要在我的Android应用程序中使用它.
我的第一次尝试是在Android.mk中:
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我有:
statis
{
System.loadLibrary("foo");
}
Run Code Online (Sandbox Code Playgroud)
这构建正确,但我注意到创建的apk不包括libfoo.so(我也看到它没有复制到libs/armeabi).我想因为这个原因我在执行我的应用程序时遇到了UnsatisfiedLinkError.
我在其他一些帖子中看到我需要添加$(PREBUILD_SHARED_LIBRARY),所以我将以下内容添加到我的Android.mk中:
include $(CLEAR_VARS)
LOCAL_MODULE:= foo
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
include $(PREBUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
但现在我收到了构建错误:
foo: LOCAL_SRC_FILES points to a missing file.
Run Code Online (Sandbox Code Playgroud)
我确信路径是正确的.请注意,libfoo.so原本是最后的版本号,但我必须删除它(并且只留下.so),因为ndk-build抱怨.
我究竟做错了什么?
找到解决方案!! LOCAL_SRC_FILES不能有绝对或相对路径,只有文件名.必须在LOCAL_PATH中设置路径.
所以在我的情况下,而不是:
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
Run Code Online (Sandbox Code Playgroud)
我现在有了:
LOCAL_PATH := $(FOO_PATH)
LOCAL_SRC_FILES := libfoo.so
Run Code Online (Sandbox Code Playgroud)
这很好用.
小智 5
包含似乎拼写错误:
include $(PREBUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
应该
include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18387 次 |
| 最近记录: |