mobile optimized. android ndk (ru)

Post on 13-Apr-2017

163 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

Плюсы

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

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

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

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

Возможности

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

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

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

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

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

Хитрости

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

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

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

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

Хитрости

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

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

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

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

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

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

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

ХитростиВызов 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

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

coffeecatch - Tiny native POSIX signal catcher

LevelDB - Fast key-value storage library

Unqlite - Transaction Embedded Database Engine

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

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

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

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

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

top related