我们说我们得到的结构如下所示
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交谈...
答案 0 :(得分:0)
AS默认编译jni目录下的所有C / C ++文件。如果您需要更多控制权,请使用实验性插件,或停用内置任务并运行ndk-build
,例如,请参阅define LOCAL_SRC_FILES in ndk{} DSL。
答案 1 :(得分:0)
Android Studio gradle-experimental插件使用$ {app} / src / main / jni作为本机代码的默认值,处理是递归的:将包含所有子目录以构建本机共享库。如果您不想要某些特定文件,可以尝试“排除”,如下所示:
https://github.com/googlesamples/vulkan-basic-samples/blob/master/LunarGSamples/Demos/Hologram/android/build.gradle
请注意,排除是针对文件名,无论它位于哪个目录或具有多个同名文件。在上面的链接中,它还包括来自“jni”文件夹内的其他目录的源代码。
你也可以看到这个例子:
https://github.com/googlesamples/android-ndk/tree/master/Teapot/app/src/main/jni
它构建并运行,在jni下也有子目录,但不使用“exclude”。
您的问题可能是其他问题,Android Studio可以处理嵌套目录。如果你可以为你的代码添加一个ling,那就太好了。