android - Android Studio 项目中 JNI/native 库的放置位置

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

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

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

进入一个apk文件。

为此, 我创建了一个带有空 Activity 的默认 Android 项目。之后,我将存储库中的相关java文件添加到我的项目中并进行了一些修改。我还在我的项目中添加了适当的 xml/图像资源。

现在,我需要将 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

最佳答案

典型的支持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 级别 build.gradle 文件中的任意位置配置您的 jniLibs 路径。

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+,您不需要为您的 c/c++ 源代码显式配置 jniLibs 路径,因为它将由 Android Studio 自动管理. src/main/cpp下的所有c/c++源代码都会自动编译打包到你的apk中。

关于android - Android Studio 项目中 JNI/native 库的放置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52046767/

相关文章:

android - Android中的回调?

使用 onTap() 时,Android 谷歌地图 View 返回错误 - 应该显示 Alertdialog

plugins - 在任何编译执行时调用Gradle自定义任务

Gradle:从编译闭包中排除和包含单行中的多个组/模块

android - Android NDK 新手 : definition in Android. mk

android - 使用相机的指纹扫描仪

android - SQLITE 查询强制应用程序关闭

java - 如何在 Android 上使用文件描述符获取文件路径?

java - gradle mysql 依赖项同步但不起作用

c++ - 安卓NDK : unable to open database file using sqlite3_open