Comments 17
Добрый день. Прошу прощения за вопрос «не в кассу». Можно ли как-то в Android Studio вести несколько проектов с использованием общего кода. Есть ли в java нечто аналогично #ifdef и куда при этом пихать переменные препроцессора? Использовать статические переменные не получается, так как нужно подсоединять различные ресурсы strings.xml и color.xml. Наверняка многие сталкивались с такой проблемой.
А вот по поводу «дружбы Java и C++ в одном приложение», очень интересно как обстоят дела с отладкой сишного кода из Android Studio? У меня как-то отладка кода из Cocos2dx так и не задалась, хотя компилировалось все и запускалось нормально.
А вот по поводу «дружбы Java и C++ в одном приложение», очень интересно как обстоят дела с отладкой сишного кода из Android Studio? У меня как-то отладка кода из Cocos2dx так и не задалась, хотя компилировалось все и запускалось нормально.
0
По первой части вопроса — то можно что-то вроде этого сделать:
таким образом можно создать несколько файлов с ресурсами( и кодом) и выбирать тип сборки какой нужно. Это максимально близкое что можно придумать.
Нащет отладки — то в описанной схеме она по прежнему не возможно, но используя среду Qt Creator можно параллельно сделать проекто-демку, который можно запускать на андроиде и без проблем отлаживать.
sourceSets {
main {
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
manifest.srcFile 'AndroidManifest.xml'
}
refcotor_list {
java.srcDirs += ['dev/refcotor_list']
res.srcDirs = ['dev/res']
}
old_list {
java.srcDirs += ['dev/old_list']
}
}
таким образом можно создать несколько файлов с ресурсами( и кодом) и выбирать тип сборки какой нужно. Это максимально близкое что можно придумать.
Нащет отладки — то в описанной схеме она по прежнему не возможно, но используя среду Qt Creator можно параллельно сделать проекто-демку, который можно запускать на андроиде и без проблем отлаживать.
+1
Я вижу, что вы отделили ресурсы, но не вижу куда вы подключили refcotor_list и old_list?
0
Извините за неполный ответ)) Еще нужно дописать что-то вроде этого кода.
После этого можно будет собирать соответственный тип сборки
![](https://habrastorage.org/r/w1560/files/a14/321/128/a143211282f5474891ccf72c540cb7bb.png)
или же выполнить соответствующую задачу, например assembleRefcotor_list
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
refcotor_list {
debuggable true
signingConfig android.signingConfigs.debug
}
old_list {
debuggable true
signingConfig android.signingConfigs.debug
}
}
После этого можно будет собирать соответственный тип сборки
![](https://habrastorage.org/files/a14/321/128/a143211282f5474891ccf72c540cb7bb.png)
или же выполнить соответствующую задачу, например assembleRefcotor_list
+1
Большое спасибо!
0
в данном случае правильние использовать flavor, а не build type.
0
По первому вопросу прочитайте про flavor, flavorDimensions и build type. Начать можно остюда. developer.android.com/tools/building/configuring-gradle.html
0
Я бы посоветовал использовать не такие ужасающие названия методов
а сделать так:
и в методе
зарегистрировать указанные нативные методы
В таком случае, вам не нужно будет переименовывать все эти методы, если вдруг понадобиться, например, изменить имя пакета или что-то другое, ну и исчезнут эти монструозные названия методов.
JNIEXPORT jstring JNICALL Java_penguin_in_flight_qttests_utils_JavaNatives_sayHello(JNIEnv *env, jobject obj)
а сделать так:
static JNINativeMethod methods[] = {
{"someMethod", "()Ljava/lang/String;", (void *)someMethod}
};
и в методе
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
зарегистрировать указанные нативные методы
if (env->RegisterNatives(javaClass, methods, sizeof(methods) / sizeof(methods[0])) < 0)
return JNI_ERR;
В таком случае, вам не нужно будет переименовывать все эти методы, если вдруг понадобиться, например, изменить имя пакета или что-то другое, ну и исчезнут эти монструозные названия методов.
0
Спасибо большое за совет.
0
Да действительно удобно.
А вы пробовали SWIG?
Позволяет избежать неприятных моментов несоответствия версий нативного и клиентского кода.
Дополнительное удобство в обработке исключений, стоит нам дописать к методу " throw(std::exception)".
Плюс — подготовленные шаблоны для vector, wstring.
И самое главное он очень гибкий инструмент и не только под Java.
Имхо, незаменимый инструмент для кросс-платформенной разработки на основе C/C++.
А вы пробовали SWIG?
Позволяет избежать неприятных моментов несоответствия версий нативного и клиентского кода.
Дополнительное удобство в обработке исключений, стоит нам дописать к методу " throw(std::exception)".
Плюс — подготовленные шаблоны для vector, wstring.
И самое главное он очень гибкий инструмент и не только под Java.
Имхо, незаменимый инструмент для кросс-платформенной разработки на основе C/C++.
0
Qt под андроид всё также требует дополнительно качать 10-12 МБ (министро вроде, точно не помню) на телефон?
0
А как у вас дела с отладкой нативной библиотеки в таком случае обстоит?
Эти сценарии мне не очень-то помогли:
github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB
geekswithblogs.net/raccoon_tim/archive/2011/09/12/working-with-android-on-windows-and-without-cygwin.aspx
comments.gmane.org/gmane.comp.lib.qt.android/3462
Видимо руки кривые… :(
Эти сценарии мне не очень-то помогли:
github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB
geekswithblogs.net/raccoon_tim/archive/2011/09/12/working-with-android-on-windows-and-without-cygwin.aspx
comments.gmane.org/gmane.comp.lib.qt.android/3462
Видимо руки кривые… :(
0
Отладка нативного кода на Андроиде — это боль. У меня она регулярно ломается по непонятным причинам. Т. е. буквально: сегодня работает, прихожу утром на следующий день — не работает. И это в Эклипсе, под который больше гайдов и советов на SO.
Ещё и банальные вещи вроде визуализации std::vector Эклипс не умеет.
Извините, накипело.
Ещё и банальные вещи вроде визуализации std::vector Эклипс не умеет.
Извините, накипело.
0
Ну примерно это я и ожидал услышать. Имхо, это настоящий ад)
Вычитав первое предложение этой статьи, я рассчитывал увидеть как подружить Qt Creator + gradle + Java (о которой возможности было заявлено разработчиками)…
Суть моей проблемы в том, что мне приходится использовать ту же Android Studio. IDE которую используют Android-разработчики, клиенты моей библиотеки. И в этом проекте используется gradle. А так же Google Maps SDK — где я переопределяю тайловый провайдер и заполняю его нативной начинкой. Т.е. локальный рендеринг карты. Да сценарий не самый лучший, но не я его инициатор.
Саму библиотеку я разрабатываю под Qt Creator'ом — удобно, если привыкнуть (тот же alt+enter под Windows). И с отладкой в нем проблем нет, если на выходе приложение, а не .so модуль (std::vector вполне читаем).
В итоге получается что на данный момент есть плавающий баг, который повторяется только Java-приложении с .so библиотекой. И разобраться в чем именно проблема не получается.
Вообщем попробую Eclipse. Спасибо, за комментарий.
Вычитав первое предложение этой статьи, я рассчитывал увидеть как подружить Qt Creator + gradle + Java (о которой возможности было заявлено разработчиками)…
Суть моей проблемы в том, что мне приходится использовать ту же Android Studio. IDE которую используют Android-разработчики, клиенты моей библиотеки. И в этом проекте используется gradle. А так же Google Maps SDK — где я переопределяю тайловый провайдер и заполняю его нативной начинкой. Т.е. локальный рендеринг карты. Да сценарий не самый лучший, но не я его инициатор.
Саму библиотеку я разрабатываю под Qt Creator'ом — удобно, если привыкнуть (тот же alt+enter под Windows). И с отладкой в нем проблем нет, если на выходе приложение, а не .so модуль (std::vector вполне читаем).
В итоге получается что на данный момент есть плавающий баг, который повторяется только Java-приложении с .so библиотекой. И разобраться в чем именно проблема не получается.
Вообщем попробую Eclipse. Спасибо, за комментарий.
0
Sign up to leave a comment.
Hello android from qt