Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
AndroidProg
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 58
#1

Сборка приложения NDK sample в Eclipse - Программирование Android

14.01.2013, 16:01. Просмотров 2920. Ответов 10
Метки нет (Все метки)

Здравствуйте.
Пытаюсь освоить программирование с использованием NDK.
Хочу для начала собрать приложение из готового примера.
В Eclipse открываю Android project from existing code.
Указываю пример из NDK San-Angeles.
Eclipse выдаёт ошибку Invalid project description
В чём проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 16:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сборка приложения NDK sample в Eclipse (Программирование Android):

Сборка приложения, NDK - Программирование Android
По книжке Android NDK:Beginners Guide установил Apache ant, NDK, SDK, Java. Пытаюсь собрать. Делаю всё по книжке: 1) cd...

Eclipse + Android NDK + Cygwin - Программирование Android
Привет всем, пожалуйста, помогите настроить среду для работы с нативным кодом. Бьюсь уже второй день. Пытаюсь настроить под виндой(Win7). В...

Eclipse ndk странные ошибки - Программирование Android
Здравствуйте! Вот мой код: com_contedevel_tests_SpeedTest.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include...

Android NDK сборка проекта - Программирование Android
Всем привет. Есть кто разбирается в Android NDK и сопутствующих технологиях по сборке приложений? Установил NDK, SDK, Cygwinn,...

Запуск приложения в Eclipse - Программирование Android
Добрый день! Прошу помочь разобраться с эклипсом и приложениями, содержащие фрагменты. Все приложения, содержащие фрагменты при...

Стоит ли писать Android-приложения в Eclipse? - Программирование Android
Всем добрый день! Помогите, пожалуйста, советом. В гугле я не смог найти ответ на свой вопрос. Суть проблемы. Я попытался начать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 16:06 #2
попробуйте так - import>General>Existing Project into Workspace
AndroidProg
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 58
14.01.2013, 16:24  [ТС] #3
Пишет No project are found to import

Добавлено через 15 минут
V0v1k, допустим я через консоль ndk-build'ом собрал либы, теперь как apk из всего этого получить?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 16:27 #4
не знаю, не юзаю NDK .
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
14.01.2013, 21:18 #5
Импортировать пример в воркспейс eclips'а, а потом конвертнуть в C++.
Первые же ссылки в выдаче.
Одно замечание: в C/C++ Build->Builder Settings->Build command: ndk-build.cmd
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,044
Завершенные тесты: 3
17.08.2013, 23:27 #6
Цитата Сообщение от EVP Посмотреть сообщение
Одно замечание: в C/C++ Build->Builder Settings->Build command: ndk-build.cmd
Ага, а в книжке указано просто ndk-build (без .cmd), а без расширения не работает.

У меня проблема в другом: библиотека из примера не собирается. Пишет:
C
1
2
3
C:/Android/android-ndk-r9/build/core/build-shared-library.mk:30: *** Android NDK: Aborting    .  Stop.
Android NDK: jni/Android.mk:mylib: LOCAL_MODULE_FILENAME should not include file extensions    
Android NDK: jni/Android.mk:mylib: LOCAL_MODULE_FILENAME must not contain a file extension
В чём может быть проблема?

Добавлено через 10 часов 37 минут
Правильно говорят: утро вечера мудренее В общем, немного продвинулся вперёд. Маленький отчёт.

C
1
2
Android NDK: jni/Android.mk:mylib: LOCAL_MODULE_FILENAME should not include file extensions    
Android NDK: jni/Android.mk:mylib: LOCAL_MODULE_FILENAME must not contain a file extension
ndk-build говорит о том, что переменная LOCAL_MODULE_FILENAME не должна содержать расширения файла. Однако дело в том, что в make-файле Android.mk эта переменная у меня вовсе не используется. Лезем читать документацию по NDK (android_mk.html):
LOCAL_MODULE_FILENAME

This variable is optional, and allows you to redefine the name of generated files. By default, module will always generate a static library named lib.a or a shared library named lib.so, which are standard Unix conventions.

You can override this by defining LOCAL_MODULE_FILENAME, For example:

LOCAL_MODULE := foo-version-1
LOCAL_MODULE_FILENAME := libfoo
*NOTE(: You should not put a path or file extension in your LOCAL_MODULE_FILENAME, these will be handled automatically by the build system.
Мой вольный перевод:
LOCAL_MODULE_FILENAME

Эта переменная, не являющаяся обязательной, позволяет вам переопределить имя генерируемых файлов.

/*...*/

*ВАЖНО: вы не должны указывать путь к файлу или расширение файла в задаваемом вами значении переменной LOCAL_MODULE_FILENAME, ndk-build сделает это автоматически.
С одной стороны, вроде бы ничего нового я не узнал, а с другой - появилась идея таки задать эту переменную принудительно:
C
1
LOCAL_MODULE_FILENAME := mylib
Никаких расширений, как и требует ndk-build.
И мои старания были вознаграждены успешным билдом!

Но приложение запустить пока так и не удалось. System.LoadLibrary("mylib") говорит, что не может найти библиотеку, хотя файл сгенерирован и лежит в папке libs проекта. Опять прошу помощи.

ПС. Android NDK Beginner's Guide неплохая книжка, судя по первым главам. Но вот уже к концу второй главы добираюсь с боями. Всё не так просто, как пишут в книге. Хотя тут ещё накладывается то, что я пользуюсь последними версиями sdk, ndk, eclipse и проч., и по сравнению с книгой имеются заметные отличия.

Добавлено через 10 часов 43 минуты
Цитата Сообщение от John Prick Посмотреть сообщение
Но приложение запустить пока так и не удалось. System.LoadLibrary("mylib") говорит, что не может найти библиотеку, хотя файл сгенерирован и лежит в папке libs проекта. Опять прошу помощи.
Никто не хочет мне помогать. Разбирайся, дескать, сам. Ну и разберусь Правда, уже всё как-то на удаче выезжаю. Попробовал пример из следующей главы. Там ndk-build не выдаёт этой непонятной ошибки (которая про "LOCAL_MODULE_FILENAME не должен содержать расширения файла"), и можно увидеть, что он генерирует на самом деле. Так вот он генерирует файл библиотеки (.so), добавляя к его имени "lib". Т.е. если я в LOCAL_MODULE указал mylib, то сгенерированный файл библиотеки будет иметь имя libmylib.so. Ну и указал я:
C
1
LOCAL_MODULE_FILENAME := libmylib
и всё заработало: приложение собралось, запустилось на девайсе и отобразилось так, как и должно было по книге!

Но мои "достижения" из серии "нет худа без добра", ибо пример-то из следующей главы снова не собирается. Пока попробую разобраться сам, а завтра уже напишу.
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,044
Завершенные тесты: 3
22.08.2013, 21:39 #7
Продолжаю изучение книги Android NDK Beginners's Guide. Дошёл до пятой главы, там начинается разбор основного приложения (которое будет теперь разбираться до самого конца книги. Т.е.если здесь не разобраться, дальше пройти не удастся). Так вот столкнулся с уже совсем не ясными проблемами.

1. В исходниках подключается файл <android_native_app_glue.h>. В настройках проекта, в путях к подключаемым файлам, указываю путь до файла (${env_var:ANDROID_NDK}\sources\android\native_app_glue), директория отображается в рабочей области проекта, нужный файл присутствует.
Далее компилирую проект (все исходники по книге), и ndk-build ругается на то, что файл <android_native_app_glue.h> не найден:
C
1
jni/eventLoop.hpp:13:37: fatal error: android_native_app_glue.h: No such file or directory
что весьма странно. Поборол это тем, что указал в #include полный путь к файлу, тогда эта ошибка исчезла, но появилась другая: нет определения функции app_dummy(), которая объявлена в android_native_app_glue.h. Чтобы компилятор нашёл определение, надо по идее добавить файл android_native_app_glue.c (полным путём) в мэйк-файл. Добавляю и вижу:
C
1
2
3
4
5
Android NDK: WARNING: Unsupported source file extensions in jni/Android.mk for module droidblaster    
Android NDK:   "c:\android\android-ndk-r9\sources\android\native_app_glue\android_native_app_glue.c"    
"Compile++ thumb : droidblaster <= EventLoop.cpp
SharedLibrary  : libdroidblaster.so
C:/Android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/objs/droidblaster/EventLoop.o: in function packt::EventLoop::run():jni/EventLoop.cpp:17: error: undefined reference to 'app_dummy'
В общем, проблема осталась, но настораживает сообщение о неподдерживаемых файловых расширениях. Речь, видимо, идёт о ".c". А как быть?...

2.Плюнул на эту app_dummy(), тем более в книжке про неё ни слова не сказано, видимо, не сильно важная функция. Без неё всё собралось и запустилось, но тут же вываливается RuntimeException.

Ну вот и застрял. Если кто-нибудь изучал книгу или знает, в чём тут дело, помогите, плиз.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
22.08.2013, 22:31 #8
Цитата Сообщение от John Prick Посмотреть сообщение
Ну вот и застрял. Если кто-нибудь изучал книгу или знает, в чём тут дело, помогите, плиз.
1. Исходники к книге тут.
2. Пути, что ты прописал - для эклипса, не для ndk-build.
3. Нужно прописать в Android.mk:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LS_CPP=$(subst $(1)/,,$(wildcard $(1)/*.cpp))
LOCAL_CFLAGS    := -DRAPIDXML_NO_EXCEPTIONS
LOCAL_MODULE    := droidblaster
LOCAL_SRC_FILES := $(call LS_CPP,$(LOCAL_PATH))
LOCAL_LDLIBS    := -landroid -llog -lEGL -lGLESv1_CM
 
LOCAL_STATIC_LIBRARIES := android_native_app_glue libpng1514
 
include $(BUILD_SHARED_LIBRARY)
 
$(call import-module,android/native_app_glue)
$(call import-module,libpng1514)


libpng у меня версии 1514. На свою замени.
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,044
Завершенные тесты: 3
23.08.2013, 02:22 #9
Цитата Сообщение от EVP Посмотреть сообщение
1. Исходники к книге тут.
Да, это я скачал сразу и использую только их, сам вручную ничего не пишу.
Цитата Сообщение от EVP Посмотреть сообщение
2. Пути, что ты прописал - для эклипса, не для ndk-build.
Т.е. это только для отображения в eclipse? ОК, понял.
Цитата Сообщение от EVP Посмотреть сообщение
3. Нужно прописать в Android.mk
А вот здесь уже не совсем понятно.
На всякий случай, что написано в книге:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE := droidblaster
LOCAL_SRC_FILES := Main.cpp EventLoop.cpp Log.cpp
LOCAL_LDLIBS := -landroid -llog
LOCAL_STATIC_LIBRARIES := android_native_app_glue
 
include $(BUILD_SHARED_LIBRARY)
 
$(call import-module.android/native_app_glue)

Вот.
Не мог бы ты объяснить, что значат те переменные в mk-файле, которых нет в книжном варианте?
Например, не понятен этот момент:
C
1
LS_CPP=$(subst $(1)/,,$(wildcard $(1)/*.cpp))
Это, я так понял, какие-то установки для расширений файлов (не могу найти LS_CPP в доке по androind.mk)
C
1
LOCAL_SRC_FILES := $(call LS_CPP,$(LOCAL_PATH))
Читать как "все .cpp-шники из LOCAL_PATH"?
C
1
LOCAL_LDLIBS    := -landroid -llog -lEGL -lGLESv1_CM
Два последних флага что значат? В доках не нашёл.
C
1
2
3
4
5
LOCAL_STATIC_LIBRARIES := android_native_app_glue libpng1514
 
include $(BUILD_SHARED_LIBRARY)
 
$(call import-module,android/native_app_glue)
На счёт libpng - где узнать её версию, и что это такое? В книге о таком не говорится.
Заранее спасибо.

Добавлено через 3 минуты
Цитата Сообщение от John Prick Посмотреть сообщение
C
1
LOCAL_LDLIBS    := -landroid -llog -lEGL -lGLESv1_CM
Два последних флага что значат? В доках не нашёл.
Нашёл. Это к Open GL относится. ОК, пока той части книги, что читаю, не требуется, но потом понадобится, видимо. Спасибо.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
23.08.2013, 17:42 #10
Я собирал пример уже с использованием OpenGL. Поэтому лишние детали обнаружились

Цитата Сообщение от John Prick Посмотреть сообщение
Не мог бы ты объяснить, что значат те переменные в mk-файле, которых нет в книжном варианте?
Если русскоязычную книгу читаешь, то страница 404: "Мастерство владения файлами Makefile".

Цитата Сообщение от John Prick Посмотреть сообщение
На счёт libpng - где узнать её версию, и что это такое? В книге о таком не говорится.
На сайте libpng указана версия. В книге про это говорится - ты не дочитал, вероятно.

Совет:
Ты сейчас работаешь под виндовс, по всей видимости. Отлаживать нативные андроид программы под виндовс сложно. Поэтому можно сразу (со временем понадобится точно) освоить кроссплатформенное программирование. Рекомендую посмотреть в сторону PowerVR SDK. Очень удобно кроссплатформенные вещи делать: отладился в виндовс под студией, портировал под андроид. Разница только в коде привязки к конкретной системе. Но это всего лишь совет
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,044
Завершенные тесты: 3
25.08.2013, 14:02 #11
ОК, разобрался. png пока тоже не нужен, ещё не дочитал до того места.
Проект собирается, видимо, я где-то случайно в мэйк-файле в имени библиотеки что-то ткнул. Скопировал ещё раз файл из примера - всё собралось без ошибок.

Только вот теперь не могу понять, почему он в отладке не запускается на моём девайсе. Предыдущие примеры все запускались.

Цитата Сообщение от EVP Посмотреть сообщение
Совет:
Ты сейчас работаешь под виндовс, по всей видимости. Отлаживать нативные андроид программы под виндовс сложно. Поэтому можно сразу (со временем понадобится точно) освоить кроссплатформенное программирование. Рекомендую посмотреть в сторону PowerVR SDK. Очень удобно кроссплатформенные вещи делать: отладился в виндовс под студией, портировал под андроид. Разница только в коде привязки к конкретной системе.
Спасибо за совет. Потом посмотрю, как эту дочитаю. Я пока не планирую что-то создавать под андроид, просто чтоб мозги не закисали, взял эту книгу. Для расширения, так сказать, кругозора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 14:02
Привет! Вот еще темы с ответами:

Учебник android, где приложения делаются на eclipse - Программирование Android
Всем привет. Дайте пожалуйста учебник по android, где в качестве среды разработки используется eclipse.

Ant и сборка приложения - Программирование Android
Подкасжите актуальный мануал или пример, как собирать приложения. В инете поискал, но там ошибка за ошибкой. И ни чего не понятно.

Сборка Android приложения - Программирование Android
Всем привет. Возникла проблемка. Мне необходимо собрать Android приложение так, чтобы его можно было запустить на любом PC. Подсказать...

Кастомный шрифт для всего приложения android eclipse - Программирование Android
Как можно применить один шрифт для всего приложения полностью, включая не только кнопки и текствьюшки, но и ЭкшнБары, Табы, Листы и тд.? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.08.2013, 14:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru