2017-05-28 1 views
0

Notre projet Android inclut des bibliothèques natives et nous ne prenons en charge que arbeabi-v7. Ainsi, l'API generate ne comprend que des bibliothèques natives pour cette architecture.RenderScript inclut des binaires natifs pour toutes les plates-formes

Ces derniers temps nous avons ajouté RenderScript qui provoque l'apk généré pour inclure librsjni.so et libRSSuport.so natif pour toute la plate-forme supportée-à-dire x86, arbeabi-v7 etc.

Les fichiers build.gradle modifications pour ajouter RenderScript sont:

defaultConfig { 
    // Other configs 

    renderscriptTargetApi 18 
    renderscriptSupportModeEnabled true 

} 

Le dossier apk libs généré ressemble à:

libs 
- armeabi-v7 
    - librsjni.so 
    - libRSSuport.so 
    - Other native libs 
- x86 
    - librsjni.so 
    - libRSSuport.so 
- Other archs 
    - librsjni.so 
    - libRSSuport.so 

Cela provoque des problèmes dans les téléphones où abi primaire est non armeabi-v7 car l'exécution peut penser que l'architecture non armeabi-v7 sont pris en charge et tente de l'exécuter et se bloque sur l'application.

A partir de maintenant nous avons ajouté ce qui suit à build.gradle:

ndk { 
    abiFilters "armeabi-v7a" 
} 

et gradle.properties:

android.useDeprecatedNdk=true 

Bien que cela résout le problème, mais il ne semble être un hack ou d'une solution non standard .

Existe-t-il un moyen standard ou recommandé pour résoudre ce problème?

+0

à mon humble avis ** abiFilters ** est une solution parfaitement standard pour votre problème. –

+0

@AlexCohn Merci pour la réponse. Ce qui me préoccupe, c'est l'utilisation de 'android.useDeprecatedNdk'. Existe-t-il un moyen d'exclure les bibliothèques avec le "ndk non déprécié"? – Abdullah

Répondre

2

Si vous utilisez uniquement les bibliothèques préconstruits, votre meilleure option est d'utiliser la fonction splits:

android { 
    … 
    splits { 
    abi { 
     enable true 
     reset() 
     include "armeabi-v7a" 
     universalApk false 
    } 
    } 
}