使用Android NDK的共享库 我在共享库中编译了C++项目。我需要将Android中的库(.so文件)与NDK一起使用 P>这个想法是,其他人会编译C++项目并给我.so文件,这样我就不必在我的计算机上编译它。

使用Android NDK的共享库 我在共享库中编译了C++项目。我需要将Android中的库(.so文件)与NDK一起使用 P>这个想法是,其他人会编译C++项目并给我.so文件,这样我就不必在我的计算机上编译它。,android,android-ndk,shared-libraries,Android,Android Ndk,Shared Libraries,我需要在我的Android.mk文件中引用.so文件,而我尝试的所有解决方案都不起作用。这就是我被困的地方 因此: 在不为每个平台创建一个共享库的情况下,是否可以执行我所描述的操作 如何在我的Android.mk中引用我的.so库?我尝试的所有解决方案都不起作用 为了从头开始复制所有内容,我执行了以下步骤: < P> 1°)创建一个HeloWord C++项目: 测试h: #include <iostream> class Test { public:

我需要在我的Android.mk文件中引用.so文件,而我尝试的所有解决方案都不起作用。这就是我被困的地方

因此:

  • 在不为每个平台创建一个共享库的情况下,是否可以执行我所描述的操作
  • 如何在我的Android.mk中引用我的.so库?我尝试的所有解决方案都不起作用

为了从头开始复制所有内容,我执行了以下步骤:

< P> 1°)创建一个HeloWord C++项目:

  • 测试h:

    #include <iostream>
    
    class Test {
    
        public:
    
        Test();
        ~Test();
    
        static std::string getTest();
    };
    
2°)创建共享库:

g++ -Wall -shared -fPIC -o libTest.so Test.cpp
<>这给了我一个LIbTest.SO文件,我可以在C++项目上使用它。现在我想在Android项目上使用它

3°)创建一个基本的空Android项目:

  • 软件包:com.so.test
  • 名称:CppTest
4°)在MainActivity.java文件旁边创建一个“Test.java”文件,其中包含:

package com.so.test;

public class Test {

    static {
        System.loadLibrary("hellondk");
    }

    public native String getMessage();
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellondk
LOCAL_SRC_FILES := com_so_test_Test.cpp
include $(BUILD_SHARED_LIBRARY)
APP_STL := stlport_static
5°)打开终端并:

cd /path/to/my/android/project/app/src/main/java
javac com/so/test/Test.java
javah com.so.test.Test
这将创建“com_so_test_test.h”文件

6°)在“com_so_test_test.cpp”文件中添加以下代码:

9°)在“jni”文件夹中创建一个“Application.mk”文件,其中包含:

package com.so.test;

public class Test {

    static {
        System.loadLibrary("hellondk");
    }

    public native String getMessage();
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellondk
LOCAL_SRC_FILES := com_so_test_Test.cpp
include $(BUILD_SHARED_LIBRARY)
APP_STL := stlport_static
10°)返回终端,运行:

/path/to/your/ndk/ndk-build
这就是我被困的地方。我需要引用Android.mk中的libTest.so文件,但我尝试的所有解决方案都不起作用。有什么想法吗

编辑:以下是我得到的错误:

[arm64-v8a] Compile++      : hellondk <= com_so_test_Test.cpp
[arm64-v8a] SharedLibrary  : libhellondk.so
./obj/local/arm64-v8a/objs/hellondk/com_so_test_Test.o: In function `Java_com_so_test_Test_getMessage':
/Users/timsandra/Desktop/CppTest/jni/com_so_test_Test.cpp:8: undefined reference to `Test::getTest()'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [obj/local/arm64-v8a/libhellondk.so] Error 1

[arm64-v8a]Compile++:hellondk可能太晚了,但是从错误消息来看,看起来像是一个简单的打字错误?(6) 
#包含“Test.hpp”
应为
#包含“Test.h”
。你的问题太完整了,我用它作为参考,让我的第一个android jni呼叫运行-谢谢你,伙计!问题从步骤2°开始。您为PC编译了Test.cpp。您必须使用NDK为Android交叉编译它。