如何在 Android Studio 中设置 JNI 子目录
How to set up JNI sub directories in Android Studio
假设我们得到的代码结构如下
src/
├── androidTest
├── app.iml
├── build.gradle
├── main
│ ├── AndroidManifest.xml
│ ├── java
│ ├── jni
│ │ ├── common
│ │ │ ├── inc
│ │ │ │ ├── common.h
│ │ │ │ ├── ...
│ │ │ └── src
│ │ │ ├── common.cc
│ │ │ ├── ...
│ │ └── native-media.cc
│ └── res
├── proguard-rules.pro
└── test
我想告诉 Gradle main/jni 中的所有源代码都应该编译。如果我直接离开,AS(Android Studio) 会使用jni 目录下的所有文件进行编译。但是如果这里有一些子目录,比如common/inc和common/src,AS就会混淆。
我在谷歌上搜索了很多,但我找到的所有方法都行不通。(例如 Gradle-experimental,实际上 Android 如果我这样做,Studio 会投诉并罢工。)
那么,用 Gradle 讨论 JNI 目录的正确方法是什么,就好像我在用 CMake 或 GNUMake 讨论一样...
AS会默认编译jni目录下的所有C/C++文件。如果您需要更多控制,请使用实验性插件,或禁用内置任务和 运行 ndk-build
,例如参见 [=11=]。
Android Studio gradle-experimental plugin默认使用${app}/src/main/jni作为原生代码,处理是递归的:所有的子目录都会被包含进去构建本机共享库。如果有一些您不想要的特定文件,您可以尝试 "exclude",如:
https://github.com/googlesamples/vulkan-basic-samples/blob/master/LunarGSamples/Demos/Hologram/android/build.gradle
请注意,exclude 是针对文件名的,与它位于哪个目录或具有多个同名文件无关。在上面的 link 中,它还包括来自 "jni" 文件夹之外的其他目录的源代码。
您可能还会看到这个例子:
https://github.com/googlesamples/android-ndk/tree/master/Teapot/app/src/main/jni
它构建并运行,在 jni 下也有子目录,但不使用 "exclude".
您的问题可能是其他问题,Android Studio 可以处理嵌套目录。如果您可以在代码中添加一个 ling,那就太好了。
假设我们得到的代码结构如下
src/
├── androidTest
├── app.iml
├── build.gradle
├── main
│ ├── AndroidManifest.xml
│ ├── java
│ ├── jni
│ │ ├── common
│ │ │ ├── inc
│ │ │ │ ├── common.h
│ │ │ │ ├── ...
│ │ │ └── src
│ │ │ ├── common.cc
│ │ │ ├── ...
│ │ └── native-media.cc
│ └── res
├── proguard-rules.pro
└── test
我想告诉 Gradle main/jni 中的所有源代码都应该编译。如果我直接离开,AS(Android Studio) 会使用jni 目录下的所有文件进行编译。但是如果这里有一些子目录,比如common/inc和common/src,AS就会混淆。
我在谷歌上搜索了很多,但我找到的所有方法都行不通。(例如 Gradle-experimental,实际上 Android 如果我这样做,Studio 会投诉并罢工。)
那么,用 Gradle 讨论 JNI 目录的正确方法是什么,就好像我在用 CMake 或 GNUMake 讨论一样...
AS会默认编译jni目录下的所有C/C++文件。如果您需要更多控制,请使用实验性插件,或禁用内置任务和 运行 ndk-build
,例如参见 [=11=]。
Android Studio gradle-experimental plugin默认使用${app}/src/main/jni作为原生代码,处理是递归的:所有的子目录都会被包含进去构建本机共享库。如果有一些您不想要的特定文件,您可以尝试 "exclude",如:
https://github.com/googlesamples/vulkan-basic-samples/blob/master/LunarGSamples/Demos/Hologram/android/build.gradle
请注意,exclude 是针对文件名的,与它位于哪个目录或具有多个同名文件无关。在上面的 link 中,它还包括来自 "jni" 文件夹之外的其他目录的源代码。
您可能还会看到这个例子:
https://github.com/googlesamples/android-ndk/tree/master/Teapot/app/src/main/jni
它构建并运行,在 jni 下也有子目录,但不使用 "exclude".
您的问题可能是其他问题,Android Studio 可以处理嵌套目录。如果您可以在代码中添加一个 ling,那就太好了。