2017-06-21 163 views
3

如何从Android项目的其余部分独立运行NDK Cmake构建,理想情况下是从Android Studio外部的命令行运行?在Android NDK项目中从命令行运行CMake

相当于从jni目录运行ndk-build以稍微老一点的Android NDK项目。

我需要调查正是调用编译器的样子,我似乎无法从Android Studio中

我第一次尝试中建设整个项目的时候得到这个信息只是从运行cmake包含CMakeLists.txtproject/app目录,但是这告诉我没有安装cmake - 那么Android Studio如何管理构建它呢?

+0

确定 - 现在已经找到了Android/SDK/cmake的/ 3.6.3155560/bin目录 - 进取.. – bph

+0

这是一个相关的和有用的资源 - > HTTPS:/ /developer.android.com/ndk/guides/cmake.html#build-command – bph

+0

这可能与你想要做的事情有关,尽管它与你的问题不一样:https://stackoverflow.com/questions/46530158 /你怎么做全套编译器和链接器标志使用的ndk生成 –

回答

6

如果你的目标只是在命令行中运行(而不是试图做正是什么gradle这个正在做),只需使用CMake的你通常会的方式:

$ cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ 
    -DANDROID_ABI=whatever $YOUR_SOURCE_DIR 

另外,您可以从命令行运行./gradlew

+1

这是正确的,但我发现,检查clang编译器的方式打电话给wa s更深一层,运行build.ninja文件时使用-v选项 – bph

+0

'-DANDROID_PLATFORM = android-XXX'也可能是必要的,其中XXX是21或16,或者任何你需要的。 –

4

您原来的问题是,您在使用Android Studio构建时看不到命令​​行调用。

你可以通过编辑你的app/build.gradle文件来得到编译器的命令行参数。

defaultConfig { 
    ... 
    externalNativeBuild { 
     cmake { 
      ... 
      arguments "-DCMAKE_VERBOSE_MAKEFILE=1", ... 
     } 
    } 

} 

在的Adroid Studio的摇篮控制台窗格中,你会再看看编译器的命令行和连接器,像这样:

[176分之1] /家/ BRAM/Android的SDK-LINUX/NDK -bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target = armv7-none-linux-androideabi --gcc-toolchain =/home/bram/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot =/home/bram/android-sdk-linux/ndk-bundle/sysroot -isystem/home/bram/android-sdk-linux/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API __ = 19 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march = armv7 -a -mfloat-abi = softfp -mfpu = v fpv3-d16 -fno-integrated-as -marm -mfpu = neon -Wa, - noexecstack -Wformat -Werror = format-security -Os -DNDEBUG -fPIC -MD -MT/home/bram/src/GPGOAP/CMakeFiles/gpgoap.dir/astar.co -MF /home/bram/src/GPGOAP/CMakeFiles/gpgoap.dir/astar.cod -o /home/bram/src/GPGOAP/CMakeFiles/gpgoap.dir/astar.co -c /家用/ BRAM/src目录/ GPGOAP/astar.c

+0

这很有趣,因为我添加了集合(CMAKE_VERBOSE_MAKEFILE)到我的CMakeLists.txt而不是build.gradle文件,但它似乎没有做任何事情。我认为这两种方法应该有效地达到同样的目的?我会回去仔细检查.. – bph