【发布时间】:2015-09-22 13:13:31
【问题描述】:
我的问题是我找不到一些合适的文档/指南来正确设置我的环境。
基本上我使用的是 Android Studio 1.3.2(截至 2015 年 9 月 22 日的最新稳定版本)和 Gradle Experimental 版本 2.5。
我在这里关注了 Google 官方文档:http://tools.android.com/tech-docs/new-build-system/gradle-experimental,但在 JNI Libs 方面我找不到任何帮助。我尝试了许多其他解决方案,但它们都不起作用,因为它们似乎已经过时了。
我有一个 .so 文件,其中包含一个简单的 C++ 库,用于测试 NDK 支持和集成,在 Google 期间宣布的 Android Studio 1.3 应该会更好I/O 2015。
这就是我非常简单的C++ Lib:
TestCPPClass.h的内容
#ifndef TESTCPPCLASS_H
#define TESTCPPCLASS_H
class TestCPPClass {
public:
double getDouble();
};
#endif TESTCPPCLASS_H
还有TestClass.cpp:
#include "TestCPPClass.h"
double TestCPPClass::getDouble()
{
return 1; // cannot be dumber ! ^^
}
使用 Cygwin 终端 和 gcc 我使用以下行编译了这个非常高级的库:
gcc.exe -shared -o TestLib.so TestCPPClass.cpp
确实正确生成了TestLib.so。
在我当前的 Android 项目中,我有一个在 JNI 中实现的 native 方法,如下所示:
public static double getDoubleFromJNI();
使用 javah.exe 我生成了 .h 文件,然后实现如下 JNI 方法:
#include "jni.h"
#include "my_package_header.h"
#include "TestCPPClass.h" // => MARKED AS RED because not found ?
JNIEXPORT jdouble JNICALL Java_my_package_header_getDoubleFromJNI
(JNIEnv *env, jobject caller)
{
// Here I wish to call my TestLib.so that should contain my TestCPPClass and call "TestCPPClass::getDouble()"
// in order to return the result.
}
那么我的 build.gradle 呢?
这就是我在model{} 中为 NDK 所拥有的内容@
android.ndk {
moduleName = "MyAwesomeJNI"
ldLibs += "TestLib" => gradle SYNC works, but BUILD fails !
}
这是我得到的错误:
错误:任务执行失败 ':app:linkArm64-v8aDebugMyAwesomeJNISharedLibrary'。
构建操作失败。 链接 libMyAwesomeJNI.so 时链接器失败。请参阅完整的日志: file:///C:/Users/Me/Documents/MyProject/app/build/tmp/linkArm64-v8aDebugMyAwesomeJNISharedLibrary/output.txt
我使用New > directory 在 jni 旁边手动创建了 jniLibs 文件夹。我还添加了一个 armeabi 文件夹并将 TestLib.so 放入其中。我试过没有armeabi,但没有运气。
我在这里缺少什么?我完全迷路了!感谢您的帮助!
【问题讨论】:
-
如果您愿意,您可以使用预构建的库,但您也可以使用 experimental 插件编译您的 TestClass.cpp。跨度>
-
@AlexCohn 正如我的帖子所说,我已经尝试使用已编译的共享库(如您所说的预构建)解决方案,但问题在于编译时不会发生的链接,因此问题出在哪里我的库根本没有被检测到,因此无法使用。
-
我看不到您的 build.gradle,但我相信问题恰恰在于混合了这两种方法。如果问题仍然相关,我可能会帮助您找到出路。我相信在交互式聊天窗口中做起来会更容易。
-
你的 build.gradle 是什么样的?我们需要知道您如何指定存储库...
标签: android c++ android-studio android-ndk java-native-interface