mobile optimized. android ndk (ru)

13
NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Upload: vladimir-hudnitsky

Post on 13-Apr-2017

163 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Mobile Optimized. Android NDK (RU)

NDK - Как это делать более эффективно

Худницкий Владимирfb.com/xputnikx

Page 2: Mobile Optimized. Android NDK (RU)

Плюсы

• Быстро• Кроссплатформенно

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 3: Mobile Optimized. Android NDK (RU)

Минусы• Поддержка в IDE?• Отладка?• Порог вхождения• Сообщество• Приложения текут

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 4: Mobile Optimized. Android NDK (RU)

Возможности

• Тяжелые фичи• Обработка медиа• Базы данных

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 5: Mobile Optimized. Android NDK (RU)

Недостатки/Проблемы

• Компиляция зависимостей• c/cpp

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 6: Mobile Optimized. Android NDK (RU)

Хитрости

Генерация хидер файла* javac CppUtils.java* javah -jni com.example.package_name.CppUtils

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 7: Mobile Optimized. Android NDK (RU)

ХитростиГенерация хидер файла

private native byte[] parseTemplate(String path, String context);

/** Class: com_example_package_name_CppUtils * Method: parseTemplate * Signature: (Ljava/lang/String;Ljava/lang/String;)[B*/JNIEXPORT jbyteArray JNICALL Java_com_rubyroid_neusis_andliquid_LiquidUtils_parseTemplate (JNIEnv *, jobject, jstring, jstring);

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 8: Mobile Optimized. Android NDK (RU)

Хитрости

Генерация сигнатуры метода

* javac CppUtils.java* javap -s -p CppUtils

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 9: Mobile Optimized. Android NDK (RU)

ХитростиГенерация сигнатуры метода

public static String readModelCallback(String path, HashMap params) { return "";}

(Ljava/lang/String;Ljava/util/HashMap;)Ljava/lang/String

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 10: Mobile Optimized. Android NDK (RU)

ХитростиВызов Java метода

jclass clazz = env->GetObjectClass(obj);

jmethodID mid = env->GetStaticMethodID(clazz, "readModelCallback", “(Ljava/lang/String;Ljava/util/HashMap;)Ljava/lang/String");

jobject result = env->CallStaticObjectMethod(clazz, mid, jpath, hashMap);

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 11: Mobile Optimized. Android NDK (RU)

Полезные библиотеки

coffeecatch - Tiny native POSIX signal catcher

LevelDB - Fast key-value storage library

Unqlite - Transaction Embedded Database Engine

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 12: Mobile Optimized. Android NDK (RU)

Зависимые библиотеки и архитектуры

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx

Page 13: Mobile Optimized. Android NDK (RU)

Не бойтесь использовать NDK!

NDK - Как это делать более эффективно Худницкий Владимир fb.com/xputnikx