如何使用Android Studio中的gradle实验插件0.2.0将静态库(.a文件)与APK链接

时间:2015-11-18 09:55:41

标签: android android-studio android-ndk android-gradle build.gradle

我的项目有两件事。

  1. 我正在使用ndk-build
  2. 创建静态库
  3. 将静态库链接到Android Studio中的现有应用程序。
  4. 提到了很多问题,并尝试了很多回复。但它们都不适合我。

    以下是我的疑惑,

    1. 实际应该放置静态库..?
    2. 如何指定我链接静态库的Gradle构建系统..?
    3. 请帮助我完成必要的步骤。

4 个答案:

答案 0 :(得分:3)

最后我找到了答案。

修改应用程序的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平台

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Hello-libs也可能是有用的:它构建2个库并在应用程序中使用它们。构建库和使用库可以解耦;如需使用,请查看app / build.gradle

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

CMake + android studio类似且更简单[它们在master-cmake分支中]

答案 3 :(得分:0)

文件夹结构在引用静态库时相对重要,我将指出我的结构,显然它对你来说会略有不同,但希望这会让事情略有不同。首先:

在我的(C :)驱动器中我有一个名为Projects的文件夹,它是我所有Android工作室项目的主页,在这个文件夹中我有我的库,以及我正在处理的应用程序的根目录(其中)使用库)

下一步是打开你想要使用库的项目,并包含这几行代码。

展开“Gradle Scripts”并打开“build.gradle(module:app)”并在依赖项下添加此项 - 编译项目(路径:“:library”)

接下来打开'settings.gradle(项目设置)'你会看到这个 - 包括':app'

编辑上面的行以阅读包含':app',':library' 在下面的行中添加这个 - 'project(“:library”)。projectDir = new File(“../(yourlibraryfoldernamehere)/ library”)'

那应该做的伎俩,希望这有帮助,如果有什么不清楚给我一个喊,我会尝试协助或解释更好!祝你好运!