13
Optimisation des Apps natives pour Android x86. Activez la compilation x86 via le NDK Cottier Jean-Claude, Ovogame [email protected]

Intel Webinar 1 - Optimiser une app NDK pour x86

  • Upload
    bemyapp

  • View
    225

  • Download
    1

Embed Size (px)

DESCRIPTION

Premier webinar d'une série de 4, organisés par Intel en collaboration avec BeMyApp et developpez.com. http://webinars-intel.developpez.com/

Citation preview

Page 1: Intel Webinar 1 - Optimiser une app NDK pour x86

Optimisation des Apps natives pour Android x86.Activez la compilation x86 via le NDK

Cottier Jean-Claude, Ovogame

[email protected]

Page 2: Intel Webinar 1 - Optimiser une app NDK pour x86

Appareils Android sous x86

La majorité des appareils Android sont basés sur architecture ARM. Mais de nos jours, de plus en plus d’appareil sont équipés de processeur Intel x86.

Tablettes: ASUS MeMO Pad, ASUS Fonepad, Dell Venue, Samsung Galaxy Tab 3…

Téléphones: Intel Yolo, Etisalat E-20, Acer Liquid C1, ASUS Fonepad Note FHD, Lenovo K900, ZTE Grand X2 In, ZTE Geek, Motorola RAZR I, ZTE Grand X IN, Lava Xolo, Megafon Mint, Lenovo K800…

Page 3: Intel Webinar 1 - Optimiser une app NDK pour x86

JAVA

Java est un langage interprété via une machine virtuelle (Dalvik).

Il n’y a aucune importance si l’appareil est sous architecture ARM ou x86.

Page 4: Intel Webinar 1 - Optimiser une app NDK pour x86

NDK: code natif (C++)

Le NDK a été créé pour permettre l’utilisation de code natif dans les APK.

Principalement pour des raisons de vitesse mais aussi pour ouvrir aux développeurs C++ l’accès à Android.

Le code C++ doit être compilé pour une architecture spécifique.

Page 5: Intel Webinar 1 - Optimiser une app NDK pour x86

NDK: le répertoire libs

Une application peut ne faire que quelques appels à ces librairies natives, ou en dépendre exclusivement.

Ces librairies peuvent être générées à partir de code C++, ou être fournit directement par un tiers.

Les librairies natives sont des fichiers .so dans le répertoire libs.

Page 6: Intel Webinar 1 - Optimiser une app NDK pour x86

NDK: le répertoire JNI

C’est le répertoire où placer votre code C++ et vos Makefiles.

Pour compiler les librairies, on utilise le script ndk-build

Application.mk sert en autre à spécifier les architectures ciblées.

APP_ABI := armeabi

Page 7: Intel Webinar 1 - Optimiser une app NDK pour x86

Librairie ARM sur architecture x86Les librairies native ARM sont ‘interprétées’ sur architecture x86. C’est l’effet inverse de celui attendu.

Plus lent que le natif.

Consomme plus d’énergie.

Page 8: Intel Webinar 1 - Optimiser une app NDK pour x86

Cibles Multiples

APP_ABI := x86 armeabi-v7a armeabi

lib/armeabi

lib/armeabi-v7a

lib/x86

Page 9: Intel Webinar 1 - Optimiser une app NDK pour x86

APKs pour different CPUs

Deux options:

Un seul APK pour tous (“fat binary”)

Intégration d’une librairie native pour chaque architecture dans un seul APK.

Solution recommandée et aussi la plus simple.

Plusieurs APKs

Un APK par architecture. Seulement si nécessaire (par exemple si le ‘fat binary’ APK est trop gros et dépasse la limite de 50Mo).

Page 10: Intel Webinar 1 - Optimiser une app NDK pour x86

Cas speciaux

Compilation conditionnelle dans Android.mk:

ifeq ($(TARGET_ARCH_ABI), x86)

‘Ce code n’est visible que lors de la compilation pour x86.’

endif

Code assembleur intégré au code source (ASM), portage nécessaire.

Utilisation de librairies tierses (3rd parties Lib) seulement compilées pour ARM: si la version x86 n’est pas disponible, alors l’optimisation sera impossible.

Page 11: Intel Webinar 1 - Optimiser une app NDK pour x86

Emulation

Installez les outils via l’Android SDK Manager.

Emulateur Intel plus rapide.

x86 system image.

Page 12: Intel Webinar 1 - Optimiser une app NDK pour x86

Middleware support pour x86Game engines/librairies avec support x86:

Havok Anarchy SDK

Unreal Engine 3

Marmalade

Cocos2Dx

FMOD

AppGameKit

libgdx

Pas de support x86 mais les apps fonctionnent sur x86:

Corona

Unity

Page 13: Intel Webinar 1 - Optimiser une app NDK pour x86

ConclusionSi vous utilisez déjà le NDK, éditez simplement le fichier Application.mk et ajoutez x86 comme cible dans la variable APP_ABI. Cela sera très probablement suffisant.

APP_ABI := x86 armeabi-v7a armeabi

Vos applications tourneront plus rapidement sous x86 et consommerons moins d’énergie.

Plus d’informations sur le site d’Intel: http://intel.ly/1jnDfAd