Slides de apoio para as minhas apresentações no Intercon Android e Intel Innovation Week, na qual apresento uma visão geral da integração do NDK com Gradle e usos avançados associados!
VISÃO GERAL NDK é um toolchain que permite que parte da sua aplicação seja construída em C/C++ Funcionalidades acessíveis para a aplicação através do padrão JNI (Java Native Interface) Binários pré-compilados (shared objects) são carregados em tempo de execução e chamados a partir no nível Java
NDK E CASOS TÍPICOS Utilizar código já construído, estabilizado e bem testado Tudo que precise mastigar números ! Engines de jogos … NDK, a princípio, não deve ser a saída para resolver ANRs
GRADLE E NDK Já foi infinitamente mais chata … Hoje é mais fácil (oficialmente suportada) Formato AAR suporta arquivos .so empacotados Integração via productFlavors e/ou APK splits
NDK E ANDROID STUDIO Suporte ainda manco … #FATO Funcionalidades da IDE ainda não plenamente integradas (auto-complete, refactor, etc) CLion é indicativo de que o suporte a C/C++ está chegando!
CAMADA DE SEGURANÇA Existem várias opções nas quais o NDK é aplicado como camada de segurança Simplesmente mover keys e tokens para o nível do NDK já representa um ganho … Diversas opções robustas herdadas do mundo C/C++
SQLITE-CIPHER Implementação transparente para criptografia dos dados armazenados via SQLite (AES-256) Integração fácil via binários pré-compilados Chave de criptografia é parâmetro nas principais operações da API https://github.com/sqlcipher/android-database-sqlcipher
NACL Biblioteca para criptografia, criada por Daniel J. Bernstein Alternativa mais moderna - e performática - aos tradicionais BouncyCastle e SpongyCastle Existem bindings prontos via JNI/NDK https://github.com/joshjdevl/kalium-jni
O-LLVM Obfuscador no nível do assembly nativo Opção para ocultar strings é um BIG WIN! Configuração “difícil", mas pelo seu custo ser ZERO, é uma boa alternativa para ferramentas como DexGuard https://github.com/obfuscator-llvm/obfuscator
NOSQL COM SNAPPYDB Armazenamento de dados tipo chave-valor SharedPreferences, versão turbo ! Suporta objetos serializáveis e POJOs Extremamente performático ! Artefato disponível via MavenCentral https://github.com/nhachicha/SnappyDB
CASOS DE FRONTEIRA Opção - não aconselhável! - para contornar o dex-limit (64k) Extrapolar o uso máximo de memória para além do limite da VM Construir e carregar o seu próprio runtime Acessar funcionalidades do hardware que não estão expostas diretamente API do Android Portabilidade de código (sim, é possível e razoável)
FINALIZANDO Brincar com NDK é legal :) Integração com Gradle já é decente e tende ser aperfeiçoada Suporte decente a C/C++ no Android Studio é questão de tempo (opinião pessoal) É uma boa opção para resolver problemas avançados, que você ainda não sabe que estão pela frente !