Android NDK / JNI:使用静态库构建共享库

时间:2013-07-17 10:19:16

标签: android android-ndk java-native-interface shared-libraries static-libraries

我需要构建一个共享库,它将在Android应用程序示例中使用。 此共享库必须使用先前静态库中包含的方法...

我有两个项目:

- C ++项目(用于使用NDK构建静态库.a)。

- Android库;使用JNI接口。

我遵循了这个教程: http://tariqzubairy.wordpress.com/2012/03/12/use-of-prebuild-static-library-compiled-with-android-toolchain/

我的Android库项目的层次结构是:

项目根

  • SRC
  • JNI
    • 包含
      • myHeader.hpp
    • prebuid (包含.a库)
      • mylib.a上
    • jni.cpp
    • Android.mk

myHeader.hpp文件:

char* myMethod(int a, int b);

jni.cpp文件:

#include <jni.h>
#include <string.h>
#include <stdio.h>
#include "include/myHeader.hpp"

extern "C"
{
    jstring Java_my_package_myMethod(JNIEnv* env, jobject obj, jint a, jint b);
}
...

android make file:

LOCAL_PATH := $(call my-dir)

#Build module for static library

include $(CLEAR_VARS)
LOCAL_MODULE                        := my_static_lib
LOCAL_SRC_FILES                     := prebuild/mylib.a
LOCAL_EXPORT_C_INCLUDES             := include/myHeader.hpp
include $(PREBUILT_STATIC_LIBRARY)


#Build module for jni wrapper

include $(CLEAR_VARS)
LOCAL_MODULE            := jni_wrapper_lib
LOCAL_SRC_FILES         := jni.cpp
LOCAL_STATIC_LIBRARIES              := my_static_lib
include $(BUILD_SHARED_LIBRARY)

当我尝试构建JNI项目时,出现以下错误: 未定义的引用“myMethod(int a,int b)”

有人能解释我为什么会收到这个错误吗?

非常感谢您的时间;

1 个答案:

答案 0 :(得分:0)

即使我不能把手放在任何相关的文档上,似乎对我来说LOCAL_EXPORT_C_INCLUDES应该指向文件夹而不是文件:

LOCAL_EXPORT_C_INCLUDES := include

这似乎是逻辑的,因为这个标志与通常的-I CFLAG等效,而-Iinclude而不是-Iinclude/myHeader.hpp

告诉我这是否解决了你的问题!