Android NDK: Entrando no Mundo Nativo

328 visualizações

Publicada em

O Android NDK é a ferramenta que permite a utilização de código nativo (C/C++) em sua aplicação Android. Nesta apresentação conheça alguns usos interessantes do NDK, as vantagens e desvantagens de utilizá-lo, além de como começar a usar esta ferramenta com o Android Studio.

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
328
No SlideShare
0
A partir de incorporações
0
Número de incorporações
9
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Android NDK: Entrando no Mundo Nativo

  1. 1. Intel Developers Relations Division androidndk:Entrandonomundonativo Eduardo Carrara Developer Evangelist – Intel @DuCarrara +EduardoCarraraDeAraujo
  2. 2. Intel Developers Relations Division 2 Agenda O Android NDK Será que você o usa e não sabe? Cuidados com a Interface Binária Começando com o Android Studio + gradle-experimental Perguntas?
  3. 3. Intel Developers Relations Division Androidndk O Native Development Kit
  4. 4. Intel Developers Relations Division 4 "O Android NDK é um conjunto de ferramentas que permitem implementar partes de sua aplicação utilizando linguagens de código nativas como C e C++." - NDK Android Developers Portal
  5. 5. Intel Developers Relations Division 5 e talvez você já esteja fazendo isso... ... vamos explorar alguns usos interessantes do NDK.
  6. 6. Intel Developers Relations Division AplicaçõesdoNDK O que podemos fazer com ele!?
  7. 7. Intel Developers Relations Division 7 Game Engines Outras+… *Other names and brands may be claimed as the property of others.
  8. 8. Intel Developers Relations Division 8 Visão Computacional • Filtros lineares e não lineares de imagens. • Tranformações Geométricas de imagens. • Estimativa de Movimentos em videos. • Subtração de Fundo em videos. • Rastreamento de objetos. • ... Outras: Cardboard-SDK, Vuforia, Layar, LibCCV, Wikitude ... OpenCV.org *Other names and brands may be claimed as the property of others.
  9. 9. Intel Developers Relations Division 9 Desenvolvimento Cross Platform *Other names and brands may be claimed as the property of others.
  10. 10. Intel Developers Relations Division 10 Outros usos e Bibliotecas Realm Swift Libpng Intel TBB Intel IPP Libcairo and libpixman Libsonic Busybox Speex FFMpeg OpenSSL Lua ... *Other names and brands may be claimed as the property of others.
  11. 11. Intel Developers Relations Division 11 Tantas aplicações bacanas! Então podemos utilizar o NDK para TUDO?!
  12. 12. Intel Developers Relations Division Entendendoondk
  13. 13. Intel Developers Relations Division Fonte: Using the NDK Performantly (Big Android BBQ 2015) 15 Visão Geral da Arquitetura App Code Classes do Framework Runtime Bibliotecas do Sistema Kernel Linux JNI Suas Bibliotecas ABI Estável
  14. 14. Intel Developers Relations Division 17 Na Prática... Microchip Icon – Icon Finder. App 0010011100 0011100111 x86 ARM MIPS O seu código: • Mais próximo do HW • Dependente de Plataforma Você deve se preocupar com isso!
  15. 15. Intel Developers Relations Division 18 Raio-X do seu APK com NDK
  16. 16. Intel Developers Relations Division 19 3 Regras de Ouro para adoção do NDK 1 2 3 Código legado que deve ser reaproveitado e muito caro para portar. Problemas Específicos de performance. Funcionalidades e Experiências que exigem performance.
  17. 17. Intel Developers Relations Division 20 3 (Principais) Barreiras para adoção do NDK 1 2 3 Ganhos de Performance não são garantidos. Complexidade de Implementação e Manutenção. Dependência de Plataforma e Compatibilidade.
  18. 18. Intel Developers Relations Division 21 Podemos, mas não devemos usar o NDK para tudo. Logo ... Ainda interessado? Tome a “pílula vermelha” e vamos te mostrar o quão longe isso vai...
  19. 19. Intel Developers Relations Division Utilizandoondk
  20. 20. Intel Developers Relations Division 23 Conceitos Fundamentais: Java Native Interface (JNI) Define como o Java e o código nativo irão conversar. Java C / C++ • Carregar a lib com: • System.loadLibrary() • Definição de Métodos Nativos: • Palavra reservada native • Incluir o header do JNI: • #include <jni.h> • Utilizar tipos específicos do JNI: • jstring, jint, jboolean, etc. • Variáveis Especiais: • JNIEnv*, JavaVM*
  21. 21. Intel Developers Relations Division 24 JNI: Mapeamento de Métodos Java -> C / C++ A Função no C / C++ deve: Usar e retornar primitivas e objetos Java JNI: Seguir o padrão de nomenclatura: Ou ser regitrada manualmente: jint xxx(JNIEnv* env, jobject instance, ...) { ... } Java_com_example_hellojni_HelloWorldJni_method JNIEnv->RegisterNatives();
  22. 22. Intel Developers Relations Division 25 JNI: Exemplo Java C / C++ public class HelloWorldJNI { static { System.loadLibrary("hello-jni"); } public native String getHelloWorldStringFromJNI(); } #include <jni.h> jstring Java_com_example_hellojni_HelloWorldJNI_getHelloWorldStringFromJNI(JNIEnv *env, jobject instance) { return (*env)->NewStringUTF(env, "Hello World!"); }
  23. 23. Intel Developers Relations Division 26 Old but Gold Compilando Apps NDK no estilo clássico. JNICode LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) APP_ABI := all jni/Android.mk jni/Application.mk
  24. 24. Intel Developers Relations Division 27 Old but Gold ndk_build script Compilando Apps NDK no estilo clássico.
  25. 25. Intel Developers Relations Division 28 Old but Gold Empacotando Apps NDK no estilo “quase” clássico. • Adicione as libs no diretório jniLibs. • Crie as interfaces java – jni. • Para pre-builts é só isso. • Para compilar a partir do source é um pouco mais complicado mas possível.
  26. 26. Intel Developers Relations Division 29 Limitações • Debug não é possível no AS. Necessário o uso do ndk-gdb e/ou Eclipse. • Suporte do plugin do gradle atual foi marcado como deprecated (ouch).
  27. 27. Intel Developers Relations Division 30 ... então para onde vamos?
  28. 28. Intel Developers Relations Division Androidstudio+ndk+gradle-experimental
  29. 29. Intel Developers Relations Division 32 Avisos Importantes • Utilizaremos a versão experimental do android gradle plugin. • Integração com Android Studio melhorou mas ainda é instável e possui bugs. • No Windows há problemas com o editor e/ou build que dificultam/impedem o uso. (Issues 195483 e 204552). • A documentação é praticamente inexistente ou incompleta.
  30. 30. Intel Developers Relations Division 33 Integração com AS Instalação e configuração do NDK integrados ao android studio.
  31. 31. Intel Developers Relations Division 34 Integração com AS
  32. 32. Intel Developers Relations Division 35 Integração com AS
  33. 33. Intel Developers Relations Division 36 gradle-experimental Configuração distributionUrl=https://services .gradle.org/distributions/gradle- 2.10-all.zip ./build.gradle ./gradle/gradle-wrapper/gradle-wrapper.properties dependencies { classpath 'com.android.tools.build:gradle- experimental:0.7.0' }
  34. 34. Intel Developers Relations Division 37 gradle-experimental Configuração: Combinação de Versões Android Studio 1.5 2.0 2.1 gradle 2.8 2.10 2.10 gradle plugin 1.5.0 2.0.0 2.1.0 gradle-experimental plugin 0.4.0 0.6.0 0.7.0
  35. 35. Intel Developers Relations Division 38 gradle-experimental Configuração: build.gradle mudanças na DSL. Sempre verifique: - NDK Samples - gradle-experimental docs apply plugin: 'com.android.model.application' model { } android { compileSdkVersion = 23 buildToolsVersion = "23.0.3" defaultConfig.with { applicationId = "com.example.hellojni" minSdkVersion.apiLevel = 4 targetSdkVersion.apiLevel = 23 } } android.ndk { moduleName = "hello-jni" } android.buildTypes { release { minifyEnabled = false proguardFiles.add(file('proguard-rules.txt')) } }
  36. 36. Intel Developers Relations Division 39 gradle-experimental Configuração: múltiplos apks. apply plugin: 'com.android.model.application' model { } android.productFlavors { } // … standard gradle stuff // … other gradle stuff create ("armv7") { } create (“x86") { } ndk.abiFilters.add("armeabi-v7a") ndk.abiFilters.add(“x86") versionCode = calculateVersionCodeFor( "armeabi-v7a") versionCode = calculateVersionCodeFor( “x86") create (“fat")
  37. 37. Intel Developers Relations Division 40 gradle-experimental Configuração: múltiplos apks. apply plugin: 'com.android.model.application' model { } def actualVersionCode = 13; // … gradle stuff // … other gradle stuff def baseVersionCode = 1000000; def versionCodeABIPrefixes = [ 'armeabi':1, 'armeabi-v7a':2, 'arm64-v8a':3, 'mips': 5,'mips64': 6, 'x86': 8, 'x86_64': 9]; def calculateVersionCodeFor = { String abi -> return versionCodeABIPrefixes.get(abi, 0) * baseVersionCode + actualVersionCode }
  38. 38. Intel Developers Relations Division 41 gradle-experimental • Ainda é possível: • Configurar bibliotecas pré-compiladas; • Adicionar flags de compilação (gerais e por flavor); • A documentação atual geralmente não acompanha os releases, portanto: • Fique de olho nos NDK Samples para referências!
  39. 39. Intel Developers Relations Division 42 Pensamentos Finais Ao usar NDK, direta ou indiretamente, adicione suporte a maior quantidade possível de plataformas. Use o NDK sabiamente: teste, faça benchmarks e garanta que ele é a solução adequada ao seu problema. Acompanhe e teste o plugin experimental do gradle para NDK!
  40. 40. Intel Developers Relations Division Perguntas?
  41. 41. Intel Developers Relations Division referências
  42. 42. Intel Developers Relations Division 48 Referências • NDK Development on Intel • Intel Tools • Android* NDK Official Documentation • Android* NDK Gradle Experimental Documentation • Android* NDK Google* Samples • Gradle Stable NDK Support - Xavier Hallade • New Android Studio NDK Support - Xavier Hallade
  43. 43. Intel Developers Relations Division obrigado
  44. 44. Intel Developers Relations Division Legal Notices and Disclaimers  INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL® PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL’S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL® PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. INTEL PRODUCTS ARE NOT INTENDED FOR USE IN MEDICAL, LIFE SAVING, OR LIFE SUSTAINING APPLICATIONS.  Intel may make changes to specifications and product descriptions at any time, without notice. Products with an “L” or “T” in the Price Point reference (e.g. U-L1, YT3, etc.) may be discontinued by Intel at any time without an end of life announcement or “last time buy” opportunity.  All products, dates, and figures specified are preliminary based on current expectations, and are subject to change without notice.  Intel, processors, chipsets, and desktop boards may contain design defects or errors known as errata, which may cause the product to deviate from published specifications. Current characterized errata are available on request.  Any code names featured are used internally within Intel to identify products that are in development and not yet publicly announced for release. Customers, licensees and other third parties are not authorized by Intel to use code names in advertising, promotion or marketing of any product or services and any such use of Intel's internal code names is at the sole risk of the user.  Software and workloads used in performance tests may have been optimized for performance only on Intel microprocessors. Performance tests, such as SYSmark and MobileMark, are measured using specific computer systems, components, software, operations and functions. Any change to any of those factors may cause the results to vary. You should consult other information and performance tests to assist you in fully evaluating your contemplated purchases, including the performance of that product when combined with other products. For more information go to http://www.intel.com/performance  Intel, Intel Inside, the Intel logo, Centrino, Centrino Inside, Intel Core, Intel Atom and Pentium are trademarks of Intel Corporation in the United States and other countries.  Material in this presentation is intended as product positioning and not approved end user messaging.  This document contains information on products in the design phase of development.  *Other names and brands may be claimed as the property of others. Copyright © 2016 Intel Corporation.
  45. 45. Intel Developers Relations Division  Security features enabled by Intel® AMT require an enabled chipset, network hardware and software and a corporate network connection. Intel AMT may not be available or certain capabilities may be limited over a host OS-based VPN or when connecting wirelessly, on battery power, sleeping, hibernating or powered off. Setup requires configuration and may require scripting with the management console or further integration into existing security frameworks, and modifications or implementation of new business processes. For more information, see http://www.intel.com/technology/manage/iamt.  WiMAX connectivity requires a WiMAX enabled device and subscription to a WiMAX broadband service. WiMAX connectivity may require you to purchase additional software or hardware at extra cost. Availability of WiMAX is limited, check with your service provider for details on availability and network limitations. Broadband performance and results may vary due to environment factors and other variables. See www.intel.com/go/wimax for more information.  Intel® My WiFi Technology is an optional feature and requires additional software and a Centrino® wireless adapter. Wi-Fi devices must be certified by the Wi-Fi Alliance for 802.11b/g/a in order to connect. See mywifi.intel.com for more details.  Hyper-Threading Technology requires a computer system with a processor supporting HT Technology and an HT Technology-enabled chipset, BIOS and operating system. Performance will vary depending on the specific hardware and software you use. For more information including details on which processors support HT Technology, see here  No system can provide absolute security under all conditions. Requires an enabled chipset, BIOS, firmware and software and a subscription with a capable Service Provider. Consult your system manufacturer and Service Provider for availability and functionality. Intel assumes no liability for lost or stolen data and/or systems or any other damages resulting thereof. For more information, visit http://www.intel.com/go/anti-theft Intel® Turbo Boost Technology requires a PC with a processor with Intel Turbo Boost Technology capability. Intel Turbo Boost Technology performance varies depending on hardware, software and overall system configuration. Check with your PC manufacturer on whether your system delivers Intel Turbo Boost Technology. For more information, see http://www.intel.com/technology/turboboost  Requires an Intel® Wireless Display enabled PC, TV Adapter, and compatible television. Available on select Intel® Core processors. Does not support Blu-Ray or other protected content playback. Consult your PC manufacturer. For more information, see www.intel.com/go/wirelessdisplay  (Built-in Visuals) Available on the 2nd gen Intel® Core™ processor family. Includes Intel® HD Graphics, Intel® Quick Sync Video, Intel® Clear Video HD Technology, Intel® InTru™ 3D Technology, and Intel® Advanced Vector Extensions. Also optionally includes Intel® Wireless Display depending on whether enabled on a given system or not. Whether you will receive the benefits of built-in visuals depends upon the particular design of the PC you choose. Consult your PC manufacturer whether built-in visuals are enabled on your system. Learn more about built-in visuals at http://www.intel.com/technology/visualtechnology/index.htm. Legal Notices and Disclaimers, cont.
  46. 46. Intel Developers Relations Division

×