问题标签 [ndk-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
410 浏览

android - 使用 ndk-build 构建的 android studio 库在运行时未更新

我在我的项目中使用了 android studio,因为它现在支持 NDK,但我仍然使用 makefile,因为使用 gradle 仍然无法完成一些事情。

我在终端中使用 ndk-build 编译我的源 c/cpp 文件,但是当我随后在 Android Studio 中点击运行时,更改不会打包到 APK 中,直到我执行“构建”->“重建项目”(它使用旧的.so 文件)。

编译后的 .so 文件被放入 jniLibs/${arch} 文件夹。

有没有办法强制 gradle 重新打包我编译的 so 文件或强制“重建项目”。

提前致谢。

0 投票
1 回答
518 浏览

android-ndk - 使 ndk-build 仅删除触发构建的那些 libs 文件夹的方法

我们有两个单独的Application.mk文件,一个有APP_ABI := armeabi armeabi-v7a,另一个有APP_ABI := x86. 这样做的原因是我们并不总是想为 X86 平台构建,而是只在满足某些条件时。因此,arm 构建由 shell 脚本无条件触发ndk-build,如果满足条件,该脚本会再次触发 X86。我面临的问题是每次触发 ndk-build 时,它都会执行以下操作: rm -f ./libs/arm64-v8a/lib*.so ./libs/armeabi/lib*.so ./libs/armeabi-v7a/lib*.so ./libs/armeabi-v7a-hard/lib*.so ./libs/mips/lib*.so ./libs/mips64/lib*.so ./libs/x86/lib*.so ./libs/x86_64/lib*.so如果现在触发 X86 构建并且构建完成,我会看到armeabiarmeabi-v7a删除 libs 文件夹。ndk-build 不应该只删除我们当前通过的那些 libs 文件夹APP_ABI吗?如果没有,有没有办法解决这个问题?

我认为build-all.mk在 NDK 发行版clean: clean-intermediates clean-installed-binaries中可能会清理所有库。

0 投票
0 回答
1657 浏览

android-ndk - 错误:使用 openssl 库为应用程序提供 NDK 构建时未定义的引用

我遵循OpenSSL wiki 中的FIPS 库和 Android来构建 FIPS 对象模块。在libcrypto.a为 ARM 和 x86 架构创建后,我将其包含libcrypto.a在项目的 jni/include 文件夹中,然后执行 NDK 构建。

我每次都收到以下错误。无法解决问题。谁能告诉我哪里出错了。

这是我的 NDK_application/jni 文件夹中的 Android.mk

0 投票
1 回答
361 浏览

android-studio - gradle 实验库链接顺序

我正在尝试使用 android gradle 实验插件 0.7.0-alpha5 构建一个应用程序。

我有一个依赖于本机库“nativeLibrary”的应用程序“mainProject”,它本身依赖于其他几个库(预编译与否)

当我构建我的 nativeLibrary 项目时,一切都可以很好地编译和链接。图书馆按照我在

堵塞。

当我尝试构建我的 mainProject 时,该项目无法链接,因为将库传递给 g++ 编译器的顺序是错误的(以随机顺序),这里是主项目的 options.txt 的摘录:

为了让它链接,我必须手动添加标签

是否有使用 gradle 实验插件的自动方式来指定库链接的顺序?或者我是否必须在尝试链接之前创建一个任务来编辑 options.txt 文件?

谢谢!!

编辑:

我在 gradle 论坛上找到了一些有用的东西,但它似乎不适用于 gradle-experimental:

https://discuss.gradle.org/t/c-cross-compiling-with-mingw-w64-is-there-a-way-to-modify-linker-flags/7390/5

0 投票
2 回答
6149 浏览

c++ - 'va_start' 用于具有固定 args 错误的函数

我的 nullPointcheck 函数:

但我收到如下 ndk 构建错误:

当我将 va_start 中的第二个参数更改为第一个参数时,如下所示:

ndk-build 导出错误如下:

vs2013没有错误,但是代码可以通过ndk-build阶段

0 投票
1 回答
73 浏览

android - Incorporate open source JniLibs into own android project

I have source code from a demo app that is involves some native coding. I'd like to integrate some part of that code into my own app.

This is how the code is structured:

Apparantly there are some parts in the native code which are specific towards the the app's package name, like in caffe_jni.cpp:

How can I refactor those names such that it can be called from my app com.myUsername? Or is there another way to include code from another app in android studio?

0 投票
1 回答
1279 浏览

android - Android Studio NDK:使用 ndk-build 编译并使用 Gradle Experimental 获得本机支持

为了在 Android Studio 编辑器中获得索引,我应该在 build.gradle 中添加以下代码:

但是 gradle 忽略了我的 Android.mk,如果我从 build.gradle 中删除这段代码,那么我将无法在编辑器中获得正确的索引,因为所有头文件都在这两个文件夹中。有谁知道如何让我的 Android.mk 编译 gradle 并且仍然获得本机编辑和调试?

我正在使用:Android Studio 2.1 stable gradle-experimental:0.7.0 my build.grade:

0 投票
1 回答
2327 浏览

android-ndk - NDKr12 LOCAL_SRC_FILES 指向路径 ../arm64-v8a/file.a 中缺少的 file.a

我的游戏正在使用 cocos2dx 2.2.6 我已经将 NDK 升级到 NDKr12 beta1 并尝试构建我的项目然后我在 NdkModule 文件夹中遇到很多错误,并且 NDK 抱怨它在 Ndk 模块路径中找不到输出文件:cocos2dx/platform/third_party/android/prebuilt/lib*/libs/arm64-v8a/file.a 如图所示 这是什么意思以及如何解决?

0 投票
1 回答
1697 浏览

android-studio - 使用 Build:Gradle:2.1.0 在 Android Studio 中包含 .so

我知道有很多类似的问题,但我就是不明白。

我已经设法将 ndk-build 集成到 build.gradle 中,但似乎我不能在我的 .apk 中包含 .so。这是我的 build.grade:

这导致以下目录结构:

p>

在我的应用程序运行时,我得到一个java.lang.UnsatisfiedLinkError:调用本机函数时...

我发现了很多东西,比如:

但我不明白这一点,我觉得没有必要为本地代码创建 .jar 档案。还是我完全错过了什么?

提前致谢!

0 投票
1 回答
495 浏览

android-ndk - ndk-build of static lib - 为什么要构建其他文件?

我有一个项目结构如下。我想要做的就是用 SQLite 源构建一个静态库,但是由于某种原因,当我运行 ndk-build 时,它也会构建其他源——就好像它在其他位置包含 Android.mk 文件一样。

TT 是指向 /work/TT 的符号链接,其中包含许多跨平台源文件,包括 SQLite、SDL2 和其他源。

这是 jni/SQLite/Android.mk

为什么要构建其他文件?仅构建 SQLite 我需要做什么?

在命令提示符下,我位于以下文件夹中:jni/SQLite

我运行 ndk-build(与上面的 Android.mk 内容相同的文件夹)

我希望看到 sqlite3.c 是唯一编译的文件。但是不,我看到所有 SDL2 项目文件都在构建中。

编译完所有文件后,如果我再次运行 ndk-build,我会看到:

这清楚地显示了正在构建的模块 SDL2 和 main.. 但是为什么呢?

也许我应该使用:

..构建我唯一想要的 Android.mk 而不是自动搜索/构建我的 jni 文件夹?

当我这样做时,我收到以下错误,但至少看起来好像它正在尝试运行一个特定的 Android.mk:

我的 Application.mk 如下,但这在我运行 ndk-build 的 SQLite 文件夹中不存在,这是 jni/Application.mk:

更新:我试过:

..并且调试输出显示 SDL2/Android.mk 和其他 .mk 文件仍在被调用。如何停止这种递归行为,使其仅在当前文件夹中构建 Android.mk?

这是我看到的调试输出的片段: