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

Ale*_*mes 34 android android-ndk android-gradle-plugin

项目结构:

应用项目 - >取决于图书馆项目

Library Project有一个用于编译的jni库的文件夹

jniLibs.srcDirs = ['libs']
Run Code Online (Sandbox Code Playgroud)

我已经尝试将以下内容添加到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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*mes 68

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

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

android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }        
}
Run Code Online (Sandbox Code Playgroud)

libs文件夹里面有一个名为"armeabi-v7a"的文件夹,因为这是我唯一的目标.

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

  • 我要澄清一下 - 如果有人在使用带有实验性Gradle 2.5的Android Studio,则会出现以下语法:android.sources {main {jniLibs {source {srcDirs'libs'}}}} (3认同)
  • 这么简单,我两天都在苦苦挣扎:你救了我! (2认同)
  • 是否有放置本机库的地方的官方文档? (2认同)

Mak*_*aks 12

新的android实验gradle插件的示例.


要求:

  • Android Studio 1.5+
  • gradle这个-2.10
  • gradle这个实验性:0.6.0-素α5

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");
}
Run Code Online (Sandbox Code Playgroud)

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"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)