【问题标题】:Where to place JNI/native libraries in Android Studio Project在 Android Studio 项目中放置 JNI/本机库的位置
【发布时间】:2019-02-02 10:22:00
【问题描述】:

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

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

到一个apk文件。

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

现在,我需要将 JNI/native 库添加到我的项目中。 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 陈旧/过时/缺乏细节。

这是我的项目结构:

【问题讨论】:

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


【解决方案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 级别的 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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多