¿Cómo puedo add.so archivos a un proyecto de biblioteca de Android usando gradle 0.7+


Estructura del proyecto:

Proyecto de aplicación depends > depende del proyecto de biblioteca

Proyecto de Biblioteca tiene una carpeta para las libs compiladas de jni

jniLibs.srcDirs = ['libs']

Y he intentado agregar lo siguiente al elemento Android de la compilación.gradle según la aplicación de ejemplohttps://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build.gradle sin embargo, los proyectos de la biblioteca de Android no son compatibles con productFlavours y, como tal, el ensamblar falla con "No se pudo encontrar el método productFlavors () para argumentos [dghdhd] en el proyecto"

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

¿ Hay alguna manera de agregar soporte ndk a un proyecto de biblioteca de Android?

Author: Alec Holmes, 2014-01-21

4 answers

Al final no necesité usar sabores de productos.

Para el proyecto de la biblioteca he añadido lo siguiente:

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

La carpeta libs tenía una carpeta dentro llamada "armeabi-v7a" y como este es mi único objetivo, funcionó muy bien.

Los archivos ndk (.so) se propagan en el proyecto de Android que está utilizando el proyecto de biblioteca de android.

 61
Author: Alec Holmes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-27 15:29:12

Ejemplo con nuevo android experimental gradle plugin.


Requisitos:

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

1) Simplemente puede poner todas las bibliotecas nativas compartidas en la carpeta main / jniLibs, de forma predeterminada.

Estructura del proyecto

Carpeta raíz / proyecto android

Carpeta raíz / android_project / app / src / main / jniLibs / x86

Carpeta raíz / android_project / app / src / main / jniLibs / armeabi-v7a

Carpeta raíz / android_project / app / src / main / jniLibs / ...

Gradle los cargará automáticamente en el dispositivo.

Entonces podría cargar la biblioteca en una aplicación.

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

2) También puede poner todas las bibliotecas nativas compartidas en la ubicación personalizada.

Ejemplo con una ruta a la bin / android / Debug directorio.

En ese caso, debe configurar manualmente la ubicación de las bibliotecas en la compilación .archivo gradle.

Estructura del proyecto

Carpeta raíz / proyecto android

Carpeta raíz / bin / android / Debug / jniLibs / x86

Carpeta raíz / bin / android / Debug / jniLibs / armeabi-v7a

Carpeta raíz / bin / android / Debug / jniLibs / ...

carpeta raíz / 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"
                    }
                }
            }
        }
    }
}
 11
Author: Maks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 23:15:49

Estoy trabajando con Android Studio 2.1, y me di cuenta de que la adición de las fuentes o sourceSets entrada a mi compilación.gradle no tuvo ningún efecto aparente. En su lugar, descubrí que necesitaba lo siguiente:

android {
    defaultConfig {
        ndk {
            moduleName "libmp3lame"
        }
    }
 1
Author: Jerry Agin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 22:59:32

Según este hilo:

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

No poder agregar archivos .so a los proyectos de biblioteca fue un error que se solucionó en la versión 0.8 del plugin.

 0
Author: Scott Barta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-24 04:18:10