小编J.P*_*.P.的帖子

Android:如何使用JNI代码中的现有C++静态库?

我已经看到了类似于这个问题的问题,但情景并不完全相同,我也无法找到适用于我的问题的答案.

我有一个C++库的源代码.我们需要将此库用作Android应用程序的一部分,但它也需要可供第三方用作C++库.

我有一个makefile,使用ndk的编译器从库的源代码生成.a文件.那是纯粹的C++部分.

在Java部分,我有一个简单的演示项目,其中包含一个包含按钮的简单活动.按下按钮时,将调用本机代码.

只要我不尝试从JNI函数调用库中的函数,一切正常.

以下是图书馆的来源:

SimpleMath.h

int Add(int aNumber1, int aNumberB);
Run Code Online (Sandbox Code Playgroud)

SimpleMath.cpp

#include "SimpleMath.h"

int Add(int aNumberA, int aNumberB)
{
  return aNumberA + aNumberB;
}
Run Code Online (Sandbox Code Playgroud)

生成文件

APP      = simple_app
LIBRARY  = simple_library.a
OBJECTS  = SimpleMath.o
CFLAGS   = -Wall -pedantic
NDK_PATH = /home/jug/perforce/jug_navui_personal_main/Env/Linux/Android/ndk/r7c
CXX      = $(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++
AR       = $(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar
SYSTEM_LIBS = -lstdc++ -lm
INCLUDE_PATH += ${NDK_PATH}/platforms/android-9/arch-arm/usr/include

all: $(LIBRARY)

$(LIBRARY): 
    $(CXX) -c SimpleMath.c
    $(AR) rcs simple_library.a SimpleMath.o

clean:
    rm *.o *.a
Run Code Online (Sandbox Code Playgroud)

在java方面,这些是文件:

你好,jni.c

#include <string.h>
#include <jni.h>

#include "../../../native/simple_library/SimpleMath.h"

jstring …
Run Code Online (Sandbox Code Playgroud)

c++ java-native-interface android static-libraries

2
推荐指数
1
解决办法
8893
查看次数