在Android Studio Project中何处放置JNI /本机库

时间:2018-08-27 20:48:41

标签: android gradle android-ndk java-native-interface

我正在尝试编译以下代码:

https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master

转换为apk文件。

为此, 我创建了一个默认的Android项目,活动为空。之后,我将资源库中的相关Java文件添加到了我的项目中,并进行了一些修改。我还向项目添加了适当的xml / image资源。

现在,我需要将JNI /本地库添加到我的项目中。 https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/native/

但是,我不知道将它们放在哪里。我唯一能找到的参考文献是

1] How to add JNI Libraries in android studio project?但是,我的项目结构看起来与屏幕截图不同。

2] Where to create jni folder in Android Studio,它是旧的/过时的/缺少详细信息。

这是我的项目结构:

Project_Structure

1 个答案:

答案 0 :(得分:1)

具有jni支持的Android项目的典型结构如下:

.
├── CMakeLists.txt // Your cmake configuration files. 
├── app.iml
├── build
├── build.gradle
├── libs
├── proguard-rules.pro
└── src
    ├── androidTest
    │   └── java
    ├── main
    │   ├── AndroidManifest.xml
    │   ├── cpp // Directory to put your jni native source code. 
    │   │   └── native-lib.cpp
    │   ├── java
    │   ├── jniLibs // Directory to put your jni libs, i.e. the .so files. 
    │   └── res
    └── test
        └── java

但是,从理论上讲,您可以在 app 级别jniLibs文件中的任意位置配置build.gradle路径。

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"
            }
        }
    }
    ...
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    ...
    sourceSets {
        main {
            // put your jni libs.
            jniLibs.srcDirs += "${projectDir}/jniLibs"]
        }
        debug {
            // put your debug version jni libs.
            jniLibs.srcDirs += "${projectDir}/jniLibs/debug"]
        }
        release {
            // put your release version jni libs.
            jniLibs.srcDirs += "${projectDir}/jniLibs/release"]
        }
    }
    ...
}

对于Android Studio 3.0+,您无需为jniLibs源代码显式配置c/c++路径,因为它将由Android Studio自动管理。 c/c++下的所有src/main/cpp源代码将被自动编译并打包到您的apk中。