如何使用 gradle 0.7+ 将 .so 文件添加到 android 库项目

问题描述 投票:0回答:5

项目结构:

应用程序项目 --> 依赖于库项目

图书馆项目 有一个用于编译 jni 库的文件夹

jniLibs.srcDirs = ['libs']

我尝试按照示例应用程序将以下内容添加到 build.gradle 的 android 元素中 https://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build。 gradle 但是 android 库项目不支持 ProductFlavours,因此组装失败,并显示“无法在项目上找到参数 [dghdhd] 的方法 ProductFlavors()”

productFlavors {
    x86 {
        ndk {
            abiFilter "x86"
        }
    }
    arm {
        ndk {
            abiFilters "armeabi-v7a", "armeabi"
        }
    }
}

有没有办法向 Android 库项目添加 ndk 支持?

android android-ndk android-gradle-plugin
5个回答
77
投票

最终我不需要使用产品香料。

对于图书馆项目,我添加了以下内容:

android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }        
}

libs 文件夹中有一个名为“armeabi-v7a”的文件夹,因为这是我唯一的目标,所以它非常有用。

ndk 文件 (.so) 被传播到使用 android 库项目的 android 项目中。


13
投票

新的 android 实验 gradle 插件的示例


要求:

  • Android Studio 1.5+
  • gradle-2.10
  • gradle-实验:0.6.0-alpha5

1) 默认情况下,您可以简单地将所有共享本机库放在 main / jniLibs 文件夹中。

项目结构

根文件夹/android项目

根文件夹/android_project/app/src/main/jniLibs/x86

根文件夹/android_project/app/src/main/jniLibs/armeabi-v7a

根文件夹/android_project/app/src/main/jniLibs/...

Gradle 会自动将它们上传到设备。

然后您可以在应用程序中加载该库。

static {
    System.loadLibrary("mylibrary");
}

2) 您还可以将所有共享本机库放在自定义位置。

示例包含 bin / android / Debug 目录的路径。

在这种情况下,您应该在 build.gradle 文件中手动设置库位置。

项目结构

根文件夹/android项目

根文件夹/bin/android/Debug/jniLibs/x86

根文件夹/bin/android/Debug/jniLibs/armeabi-v7a

根文件夹/bin/android/Debug/jniLibs/...

根文件夹/android_project/app/build.gradle

apply plugin: 'com.android.model.application'

model {
    android {
        sources {
            main {
                jni {
                    source {
                        srcDirs = []
                    }
                }

                jniLibs {
                    source {
                        srcDirs "/../../bin/android/Debug/jniLibs"
                    }
                }
            }
        }
    }
}

0
投票

根据此线程:

https://groups.google.com/forum/#!topic/adt-dev/nQobKd2Gl_8

无法将 .so 文件添加到库项目是插件 v0.8 中修复的一个错误。


0
投票

我正在使用 Android Studio 2.1,我发现将源或 sourceSets 条目添加到我的 build.gradle 中没有明显效果。 相反,我发现我需要以下内容:

android {
    defaultConfig {
        ndk {
            moduleName "libmp3lame"
        }
    }

0
投票

我找到了一个简单的方法,不需要编辑build.gradle文件。

只需为拱门添加

jniLibs
目录和子目录,如下图所示(这是 MS Copilot 的简单答案): enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.