4 / 4 / 1
Регистрация: 21.10.2012
Сообщений: 58
1

Сборка приложения NDK sample в Eclipse

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

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Пытаюсь освоить программирование с использованием NDK.
Хочу для начала собрать приложение из готового примера.
В Eclipse открываю Android project from existing code.
Указываю пример из NDK San-Angeles.
Eclipse выдаёт ошибку Invalid project description
В чём проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2013, 16:01
Ответы с готовыми решениями:

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

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

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

Wav format - sample Size и bits per sample это одно и тоже?
ребят подскажите пожалуйста sample Size и bits per sample это одно и тоже?

10
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 16:06 2
попробуйте так - import>General>Existing Project into Workspace
0
4 / 4 / 1
Регистрация: 21.10.2012
Сообщений: 58
14.01.2013, 16:24  [ТС] 3
Пишет No project are found to import

Добавлено через 15 минут
V0v1k, допустим я через консоль ndk-build'ом собрал либы, теперь как apk из всего этого получить?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 16:27 4
не знаю, не юзаю NDK .
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
14.01.2013, 21:18 5
Импортировать пример в воркспейс eclips'а, а потом конвертнуть в C++.
Первые же ссылки в выдаче.
Одно замечание: в C/C++ Build->Builder Settings->Build command: ndk-build.cmd
1
2268 / 1761 / 739
Регистрация: 27.07.2012
Сообщений: 5,233
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
и всё заработало: приложение собралось, запустилось на девайсе и отобразилось так, как и должно было по книге!

Но мои "достижения" из серии "нет худа без добра", ибо пример-то из следующей главы снова не собирается. Пока попробую разобраться сам, а завтра уже напишу.
0
2268 / 1761 / 739
Регистрация: 27.07.2012
Сообщений: 5,233
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.

Ну вот и застрял. Если кто-нибудь изучал книгу или знает, в чём тут дело, помогите, плиз.
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
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. На свою замени.
1
2268 / 1761 / 739
Регистрация: 27.07.2012
Сообщений: 5,233
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 относится. ОК, пока той части книги, что читаю, не требуется, но потом понадобится, видимо. Спасибо.
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
23.08.2013, 17:42 10
Я собирал пример уже с использованием OpenGL. Поэтому лишние детали обнаружились

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

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

Совет:
Ты сейчас работаешь под виндовс, по всей видимости. Отлаживать нативные андроид программы под виндовс сложно. Поэтому можно сразу (со временем понадобится точно) освоить кроссплатформенное программирование. Рекомендую посмотреть в сторону PowerVR SDK. Очень удобно кроссплатформенные вещи делать: отладился в виндовс под студией, портировал под андроид. Разница только в коде привязки к конкретной системе. Но это всего лишь совет
1
2268 / 1761 / 739
Регистрация: 27.07.2012
Сообщений: 5,233
25.08.2013, 14:02 11
ОК, разобрался. png пока тоже не нужен, ещё не дочитал до того места.
Проект собирается, видимо, я где-то случайно в мэйк-файле в имени библиотеки что-то ткнул. Скопировал ещё раз файл из примера - всё собралось без ошибок.

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

Цитата Сообщение от EVP Посмотреть сообщение
Совет:
Ты сейчас работаешь под виндовс, по всей видимости. Отлаживать нативные андроид программы под виндовс сложно. Поэтому можно сразу (со временем понадобится точно) освоить кроссплатформенное программирование. Рекомендую посмотреть в сторону PowerVR SDK. Очень удобно кроссплатформенные вещи делать: отладился в виндовс под студией, портировал под андроид. Разница только в коде привязки к конкретной системе.
Спасибо за совет. Потом посмотрю, как эту дочитаю. Я пока не планирую что-то создавать под андроид, просто чтоб мозги не закисали, взял эту книгу. Для расширения, так сказать, кругозора.
0
25.08.2013, 14:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2013, 14:02
Помогаю со студенческими работами здесь

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

Подключить стороннюю NDK-библиотеку к своему NDK-проекту
Пытаюсь подключить к своему (на самом деле не совсем своему) NDK-проекту стороннюю библиотеку...

Сборка jar в eclipse
Написал программу на Java в eclipse как мне переделать в jar что бы потом переделать в exe?

Сборка веб-сервера на maven в eclipse
Здравствуйте, при попытке собрать простейший проект на maven где-то в main вываливается...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru