如何在 Android Studio 中使用 gradle 实验性插件 0.2.0 Link 带有 APK 的静态库(.a 文件)

How to Link Static Libraries(.a files) with APK using gradle experimental plugin 0.2.0 in Android Studio

我的项目中有两件事。

  1. 我正在使用 ndk-build
  2. 创建一个静态库
  3. Link 将静态库添加到 Android Studio 中的现有应用程序。

参考了很多问题并尝试了很多回复。但是 none 对我有用。

这是我的疑惑,

  1. 静态库究竟应该放在哪里..?
  2. 如何指定我正在链接静态库的 Gradle 构建系统..?

请帮助我完成所需的步骤。

在引用静态库时,文件夹结构相对重要,我将说明我的结构,显然它对您来说会略有不同,但希望这能让您明白一些。首先:

在我的 (C:) 驱动器中,我有一个名为 Projects 的文件夹,它是我所有 Android 工作室项目的所在地,在这个文件夹中,我有我的库,以及应用程序的根目录我正在研究(使用图书馆)

下一步是打开您要在其中使用该库的项目并包含这几行代码。

展开 "Gradle Scripts" 并打开 'build.gradle(module:app)' 并在 dependencies 下添加这个 - compile project(path: ":library")

接下来打开 'settings.gradle(Project Settings)',您应该会看到这个 - 包含“:app”

编辑以上行以读取包括':app', ':library' 并在下面的行中添加 - 'project(":library").projectDir = new File("../(yourlibraryfoldernamehere)/library")'

应该可以解决问题,希望这对您有所帮助,如果有任何不清楚的地方,请告诉我,我会尽力提供帮助或更好地解释!祝你好运!

终于找到答案了

修改应用程序的build.gradle文件...如下

android.ndk {
    moduleName = "AEC"
    ldLibs += ["android", "OpenSLES", "log"]
    ldFlags += "/home/lone/AndroidStudioProjects/AcousticEchoCanceller/app/src/main/jni/prebuilt/libToneDetect.a"
    ldFlags += "/home/lone/AndroidStudioProjects/AcousticEchoCanceller/app/src/main/jni/prebuilt/libAec.a"
    CFlags += ['-std=c99']
}

注意:这仅在库和体系结构相同时有效。该 apk 仅适用于 1 个平台

Hello-libs 可能也有帮助:它构建了 2 个库并在应用程序中使用它们。构建库和使用库可以分离;有关用法,请查看 app/build.gradle

示例用于共享库;按照 gperf 上面对静态库的评论,build.gradle [不要将静态库放入 jniLibs 文件夹,不需要],它将起作用。

CMake + android studio 类似,更简单[他们在master-cmake分支]

gradle-experimental 0.2.0 现在已经很老了。我有 0.7.2 的解决方案。

将此放在 Android{}

的外部
repositories {
    libs(PrebuiltLibraries) {
        yourlib {
            headers.srcDir "src/main/jni/prebuilts/include"
            binaries.withType(SharedLibraryBinary) {
                sharedLibraryFile = file("src/main/jni/prebuilts/${targetPlatform.getName()}/libyourlib.so")
            }
        }
    }
}

以及 Android{}

中的这段代码
   sources {
        main {
            jni {
                dependencies {
                    library "yourlib" linkage "shared" 
                }
            }
        }
    }

代码来自:Xavier Hallade post