moviles - descargar gradle para android studio
Android gradle, libs nativos para diferentes arquitecturas (2)
Supongo:
ndk {
moduleName "resolver"
stl "gnustl_shared"
cFlags "-std=c++11"
abiFilters = [''armeabi'',''arm-v7'']
}
Y eliminar
sourceSets {
main {
jniLibs.srcDirs = [''libs'']
}
}
Estoy intentando construir apk universal para todas las arquitecturas. Aquí está mi estructura de proyecto:
-App
-appModule
-libraryModule
-libs
-armeabi
-lib.so
-src
-java
-jni
Aquí está mi archivo gradle para libraryModule:
apply plugin: ''com.android.library''
// http://stackoverflow.com/questions/28485309/how-to-build-single-apk-with-andoid-ndk-and-gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
ndk {
moduleName "ProxyResolver" // <-- This is the name of AndroidProxy native module
stl "gnustl_shared"
cFlags "-std=c++11"
abiFilters = [''armeabi'']
ldLibs (projectDir.absolutePath + "/libs/armeabi/libresolver.so")
}
}
sourceSets {
main {
jniLibs.srcDirs = [''libs'']
}
}
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
}
Como puede ver, la ruta de la biblioteca está codificada . Y ahora funciona en los procesadores arm-v7. Pero necesito agregar soporte de x86 sin agregar sabor
Configurar abiFilters
en tu defaultConfig
solo agrega información a las capacidades de la aplicación (solo es útil para el instalador, es decir, el instalador muestra un error cuando el dispositivo que intentas instalar no es compatible) y no cambia los binarios que se agregan a la aplicación final. ver también https://.com/a/39445685/1827156 .
Supongo que lo que quieres lograr es tener diferentes apk
para diferentes arquitecturas. Este es un uso común, es decir, para reducir el tamaño de construcción. Puede lograr esto mediante el uso de splits
en build.gradle
su aplicación. Consulte https://developer.android.com/studio/build/configure-apk-splits.html .
Recomiendo encarecidamente https://www.neotechsoftware.com/blog/native-libraries-part-i-common-pitfalls (no soy el autor).
Nota sobre aar
trabajar con libraries / aar
s: Sin embargo, hay una gran dificultad cuando trabajas con bibliotecas ( aar
lugar de apk
). Imho, no puedes (automágicamente) crear diferentes aar
específicas de aar
. En cambio, crea aar
s que contiene los binarios para todos los ABI. Al agregar el aar
a una aplicación de Android, especifique splits
en las aplicaciones build.gradle
como se mencionó anteriormente.