【问题标题】:How can I add .so files to an android library project using gradle 0.7+如何使用 gradle 0.7+ 将 .so 文件添加到 android 库项目
【发布时间】:2014-02-10 20:52:25
【问题描述】:

项目结构:

App 项目 --> 依赖于 Library 项目

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

jniLibs.srcDirs = ['libs']

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

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

有没有办法为 android 库项目添加 ndk 支持?

【问题讨论】:

    标签: android android-ndk android-gradle-plugin


    【解决方案1】:

    最后我不需要使用产品口味。

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

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

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

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

    【讨论】:

    • 这么简单,我为此苦苦挣扎了两天:D 你救了我!
    • @ferdy182,这真是个好消息!我很高兴它有帮助!
    • 在尝试构建一个只有“armeabi”文件夹的旧项目时,找不到 .so 文件。将它们复制到“armeabi-v7a”文件夹中解决了这个问题。不知道为什么在这种情况下它不会依赖“armeabi”,但那是 Gradle!
    • 让我澄清一下 - 如果有人使用带有实验性 Gradle 2.5 的 Android Studio,则语法如下:android.sources { main { jniLibs { source { srcDirs 'libs' } } } }跨度>
    • 有没有官方文档可以放原生库的地方?
    【解决方案2】:

    以新的android experimental gradle plugin 为例。


    要求:

    • Android Studio 1.5+
    • gradle-2.10
    • gradle-experimental:0.6.0-alpha5

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

    项目结构

    根文件夹/安卓项目

    根文件夹/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 文件中手动设置库位置。

    项目结构

    根文件夹/安卓项目

    根文件夹/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"
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 不确定这个答案是否正确?我不认为 jniLibs 现在是在 AS 中创建的?
    • 现在认为默认只是 app/libs(但不是 100% 确定)
    【解决方案3】:

    根据这个帖子:

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

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

    【讨论】:

    • 感谢您的回答,遗憾的是它没有帮助解决我的问题。修复更简单。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多