Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio NDK解决方案_Java_Android_C++_Android Studio_Android Ndk - Fatal编程技术网

Java Android Studio NDK解决方案

Java Android Studio NDK解决方案,java,android,c++,android-studio,android-ndk,Java,Android,C++,Android Studio,Android Ndk,我正在尝试整合NDK项目,Android Studio告诉我,我可以通过以下方式解决问题: 警告:已找到本机C/C++源代码,但NDK 未配置选项。请注意,如果您有一个Android.mk,它是 不用于编译。建议的解决方法是删除 默认jni源代码目录,添加: android { sourceSets { main { jni.srcDirs = [] } } } 要编译build.gradle,请使用ndk build手动编译代码,然后

我正在尝试整合NDK项目,Android Studio告诉我,我可以通过以下方式解决问题:

警告:已找到本机C/C++源代码,但NDK 未配置选项。请注意,如果您有一个Android.mk,它是 不用于编译。建议的解决方法是删除 默认jni源代码目录,添加:

android {
    sourceSets {
        main {
            jni.srcDirs = []
    }
} } 
要编译build.gradle,请使用ndk build手动编译代码,然后 将生成的共享对象放在src/main/jniLibs中

所以在我的ndk构建之后,我发现有两个地方可以找到armeabi-v7a、mips和x86文件夹中的.so文件

/libs
/obj/local
那么以上两个文件夹中哪些文件夹包含要复制的实际.so文件?

我是否需要配置其他任何东西才能使其正常工作?我通过Android Studio的import ADT方法导入了该项目。
谢谢大家!

建议的解决方法假设您手动将libs目录的内容复制到src/main/jniLibs

另一种解决方法是将以下附魔添加到build.gradle文件中:

jniLibs.srcDirs = [ 'libs' ]

这一行与您引用的消息中所述的jni.srcDirs一起使用。

建议的解决方法假定您手动将libs目录的内容复制到src/main/jniLibs

另一种解决方法是将以下附魔添加到build.gradle文件中:

jniLibs.srcDirs = [ 'libs' ]

这一行与您引用的消息中所述的jni.srcDirs一起使用。

您需要将其放在
libs
文件夹下。如果您遵循ndk编译,将创建总共4个文件夹。在每个文件夹下都可以放置
.so
文件我已经完成了ndk构建,它在两个文件夹中创建了.so文件,我想问的是这两个文件夹中的哪一个(/libs或/obj/local)从开始将我的“.so”文件复制到我的主要Android Studio项目中。据我所知,
obj/local/
拥有您编译的所有内容,包括
o.d
和可执行文件,但lib只有
。因此
文件。i、 e obj/local拥有
文件的新副本。这是用于编译
的默认环境。NDK_LIBS_OUT=。/LIBS NDK_OUT=。/obj
您需要将其放在
LIBS
文件夹下。如果您遵循ndk编译,将创建总共4个文件夹。在每个文件夹下都可以放置
.so
文件我已经完成了ndk构建,它在两个文件夹中创建了.so文件,我想问的是这两个文件夹中的哪一个(/libs或/obj/local)从开始将我的“.so”文件复制到我的主要Android Studio项目中。据我所知,
obj/local/
拥有您编译的所有内容,包括
o.d
和可执行文件,但lib只有
。因此
文件。i、 e obj/local拥有
文件的新副本。这是用于编译
的默认环境。NDK_LIBS_OUT=./LIBS NDK_OUT=./obj
还请注意,这些库不是直接包含在
jniLibs.srcDirs
目录中,而是包含在名为编译库的体系结构的子目录中。例如,使用名为
libdetection\u-based\u-tracker.so
的库和
jniLibs.srcDirs=['src/main/jniLibs']
,您的文件路径可能是:
src\main\jniLibs\armeabi-v7a\libdetection\u-based\u-tracker.so
src\main\jniLibs\x86\libdetection\u-based\u-tracker.so
。那么/obj/local中的.so文件不是我需要指向的文件吗?问题中的一条评论指出,他们有更多的.so文件的新副本,并且它也有相同的.so文件集,但大小与/libs目录中的文件不同。/obj下的文件对于调试非常重要。当我们使用ndk stack或addr2line时,我们指向/obj下的“fat”副本。链接器(从ndk构建开始)在/obj中生成其输出。然后,ndk构建启动剥离过程,将剥离版本的库复制到/libs文件夹。在设备上运行程序不需要所有调试符号信息,但您可以享受APK大小的显著增加。谢谢!这就是我要寻找的答案。还要注意的是,这些库不是直接包含在
jniLibs.srcDirs
目录中,而是包含在名为编译库的体系结构的子目录中。例如,使用名为
libdetection\u-based\u-tracker.so
的库和
jniLibs.srcDirs=['src/main/jniLibs']
,您的文件路径可能是:
src\main\jniLibs\armeabi-v7a\libdetection\u-based\u-tracker.so
src\main\jniLibs\x86\libdetection\u-based\u-tracker.so
。那么/obj/local中的.so文件不是我需要指向的文件吗?问题中的一条评论指出,他们有更多的.so文件的新副本,并且它也有相同的.so文件集,但大小与/libs目录中的文件不同。/obj下的文件对于调试非常重要。当我们使用ndk stack或addr2line时,我们指向/obj下的“fat”副本。链接器(从ndk构建开始)在/obj中生成其输出。然后,ndk构建启动剥离过程,将剥离版本的库复制到/libs文件夹。在设备上运行程序不需要所有调试符号信息,但您可以享受APK大小的显著增加。谢谢!这就是我一直在寻找的答案。