mad*_*mad 17 android android-gradle-plugin ndk-build
我的应用程序具有以下结构
Android
|
|-> app
| |
| |-> build [1]
| |-> src
| | |-> main
| | | |-> assets
| | | |-> java
| | | |-> jni
| | | | |-> Android.mk
| | | | |-> Application.mk
| | | |
| | | |-> jniLibs
| | | | |-> armeabi
| | | | |-> armeabi-v7a
| | | |
| | | |-> res
| | | |-> AndroidManifest.xml
|
|-> build [2]
Run Code Online (Sandbox Code Playgroud)
我在linux机器上.so
用ndk-build
命令构建我的库.我用它像:
<my_ndk_path>/ndk-build -C <my_project_path>/Android/app/src/main/
Run Code Online (Sandbox Code Playgroud)
构建过程工作正常,输出文件生成没有错误.
我的问题是结果文件没有"指向正确的位置"
将libs
在生成:
.app/src/main/libs/armeabi-v7a/libMyGeneratedLibrary.so
.app/src/main/libs/armeabi/libMyGeneratedLibrary.so
Run Code Online (Sandbox Code Playgroud)
以及以下obj
文件:
.app/src/main/obj/local/armeabi-v7a/libMyGeneratedLibrary.so
.app/src/main/obj/local/armeabi/libMyGeneratedLibrary.so
Run Code Online (Sandbox Code Playgroud)
我想在不同的位置产生输出:
libs
在jniLibs
.即../app/src/main/jniLibs/armeabi*
obj
构建一个文件夹下.即.build
[1]或build
[2].有没有可能通过将某些参数更改为.mk
文件或构建命令来实现此目的?
编辑
TARGET_OUT
似乎在NDK r6b中不起作用
执行命令 ndk-build -C Android/app/src/main/ TARGET_OUT='Android/app/src/main/jniLibs/$(TARGET_ARCH_ABI)'
每个生成的文件都会显示以下警告.
android-ndk-r6b/build/core/build-binary.mk:217: warning: overriding commands for target 'Android/app/src/main/jniLibs//objs/***/****.o'
android-ndk-r6b/build/core/build-binary.mk:217: warning: ignoring old commands for target 'Android/app/src/main/jniLibs//objs/***/****.o'
Run Code Online (Sandbox Code Playgroud)
小智 32
您可以使用NDK_LIBS_OUT
更改libs输出和NDK_OUT
更改obj输出.像这样 :ndk-build NDK_LIBS_OUT=./jniLibs NDK_OUT=./obj
小智 5
如果您需要构建所有可用的体系结构,请使用参数:
TARGET_OUT='<your_build_dir>/$(TARGET_ARCH_ABI)'
Run Code Online (Sandbox Code Playgroud)
如果只有一个目标架构就足够了,那么使用参数:
TARGET_OUT=<your_build_dir>
Run Code Online (Sandbox Code Playgroud)
编辑(对于使用较新 NDK 版本涉及此主题的任何人):
NDK_LIBS_OUT
更改库输出(需要 NDK r9 及更高版本)NDK_OUT
更改 obj 输出(需要 NDK r7c 及更高版本)构建命令是:
ndk-build NDK_LIBS_OUT=./jniLibs NDK_OUT=./obj
Run Code Online (Sandbox Code Playgroud)
先前的答案(适用于任何情况):
我怎么解决。不是很优雅,但至少它有效。
因为我的构建机制非常复杂,所以我也有几个自定义的 gradle 任务和脚本,所以构建的单个命令对我来说并不重要。
所以我保持构建命令不变
<my_ndk_path>/ndk-build -C <my_project_path>/Android/app/src/main/
Run Code Online (Sandbox Code Playgroud)
添加文件夹创建(-p 如果存在则不会生成错误)
mkdir -p <my_project_path>/Android/app/src/main/jniLibs/
Run Code Online (Sandbox Code Playgroud)
然后,我使用同步命令将 .so 文件移动到最终位置。
rsync -avh --remove-source-files \
<my_project_path>/Android/app/src/main/libs/* \
<my_project_path>/Android/app/src/main/jniLibs/
Run Code Online (Sandbox Code Playgroud)
您可以对该obj
文件夹执行类似的操作。我刚刚修改了我的 .gitignore,所以我保持原样。
归档时间: |
|
查看次数: |
11381 次 |
最近记录: |