如何在 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
我的项目中有两件事。
- 我正在使用
ndk-build
创建一个静态库
- Link 将静态库添加到 Android Studio 中的现有应用程序。
参考了很多问题并尝试了很多回复。但是 none 对我有用。
这是我的疑惑,
- 静态库究竟应该放在哪里..?
- 如何指定我正在链接静态库的 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
我的项目中有两件事。
- 我正在使用
ndk-build
创建一个静态库
- Link 将静态库添加到 Android Studio 中的现有应用程序。
参考了很多问题并尝试了很多回复。但是 none 对我有用。
这是我的疑惑,
- 静态库究竟应该放在哪里..?
- 如何指定我正在链接静态库的 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