Dar*_*kar 16 android android-ndk
我在我的Android应用程序中使用本机代码.首先我只使用一个库.所以一切都很好.但现在我必须再将一个库集成到其中.我不知道应该是我的项目的jni文件夹的理想结构(如在哪里放置整个代码等).我找到了一个解决方法.我在jni .ie library1和library2中创建了两个文件夹.再次在两个文件夹中创建了一个jni文件夹,并将相应的代码放在文件夹中.
我得到它编译.两个.so文件都正在生成,但我无法在我的应用程序中使用它.我无法使用System.loadLibrary("library1.so")加载库; 也尝试提供完整的路径.但失败了
另外我不知道在父jni文件夹的Android.mk文件中写什么.
当前结构:project_folder - > jni - > library1 - > jni - >"源代码"一个Android.mk写在这里project_folder - > jni - > library2 - > jni - >"源代码"一个Android.mk写在这里
更新#1:
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
make: *** No rule to make target `jni/zap/jni/zap/zap/error.c', needed by `obj/local/armeabi/objs-debug/zap/jni/zap/zap/error.o'. Stop.
Run Code Online (Sandbox Code Playgroud)
我没有使用Application.mk.这是我的Android.mk:
TOP_PATH := $(call my-dir)
# Build library 1
include $(CLEAR_VARS)
LOCAL_PATH := $(TOP_PATH)/zap
LOCAL_MODULE := zap
LOCAL_C_INCLUDES := $(LOCAL_PATH)/zap
LOCAL_SRC_FILES := $(LOCAL_PATH)/zap/error.c \
$(LOCAL_PATH)/zap/hello-jni.c \
$(LOCAL_PATH)/zap/zap.c \
$(LOCAL_PATH)/zap/zapd.c \
$(LOCAL_PATH)/zap/zaplib.c
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
saf*_*ety 21
我发现最好的结构是仅将jni /文件夹用于ndk-build makefile,并将源保存在自己的文件夹中.这很容易添加到现有项目而无需在jni下重构树.
但是,您必须要小心如何处理LOCAL_PATH变量并使用$(调用my-dir).这是一个有效的例子:
Android.mk:
# TOP_PATH refers to the project root dir (MyProject)
TOP_PATH := $(call my-dir)/..
# Build library 1
include $(CLEAR_VARS)
LOCAL_PATH := $(TOP_PATH)/library1
LOCAL_MODULE := library1
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := source1.cpp
include $(BUILD_SHARED_LIBRARY)
# Build library 2
include $(CLEAR_VARS)
LOCAL_PATH := $(TOP_PATH)/library2
LOCAL_MODULE := library2
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := source2.cpp
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
您可以选择将Android.mk中的部分拆分为自己的makefile.
| 归档时间: |
|
| 查看次数: |
11560 次 |
| 最近记录: |