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

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

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

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

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

Здравствуйте.
Пытаюсь освоить программирование с использованием NDK.
Хочу для начала собрать приложение из готового примера.
В Eclipse открываю Android project from existing code.
Указываю пример из NDK San-Angeles.
Eclipse выдаёт ошибку Invalid project description
В чём проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 16:06     Сборка приложения NDK sample в Eclipse #2
попробуйте так - import>General>Existing Project into Workspace
AndroidProg
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 58
14.01.2013, 16:24  [ТС]     Сборка приложения NDK sample в Eclipse #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     Сборка приложения NDK sample в Eclipse #4
не знаю, не юзаю NDK .
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 462
14.01.2013, 21:18     Сборка приложения NDK sample в Eclipse #5
Импортировать пример в воркспейс eclips'а, а потом конвертнуть в C++.
Первые же ссылки в выдаче.
Одно замечание: в C/C++ Build->Builder Settings->Build command: ndk-build.cmd
John Prick
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 3
17.08.2013, 23:27     Сборка приложения NDK sample в Eclipse #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
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 3
22.08.2013, 21:39     Сборка приложения NDK sample в Eclipse #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
Сообщений: 462
22.08.2013, 22:31     Сборка приложения NDK sample в Eclipse #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
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 3
23.08.2013, 02:22     Сборка приложения NDK sample в Eclipse #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
Сообщений: 462
23.08.2013, 17:42     Сборка приложения NDK sample в Eclipse #10
Я собирал пример уже с использованием OpenGL. Поэтому лишние детали обнаружились

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

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

Совет:
Ты сейчас работаешь под виндовс, по всей видимости. Отлаживать нативные андроид программы под виндовс сложно. Поэтому можно сразу (со временем понадобится точно) освоить кроссплатформенное программирование. Рекомендую посмотреть в сторону PowerVR SDK. Очень удобно кроссплатформенные вещи делать: отладился в виндовс под студией, портировал под андроид. Разница только в коде привязки к конкретной системе. Но это всего лишь совет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 14:02     Сборка приложения NDK sample в Eclipse
Еще ссылки по теме:
Сборка Android приложения Android
Android Ant и сборка приложения
Кастомный шрифт для всего приложения android eclipse Android
Android Сборка приложения в AS (совместимость >= Android 4.0)
Виснет Eclipse при тестировании приложения с подключенной библиотекой google_play_services Android

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

Или воспользуйтесь поиском по форуму:
John Prick
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 3
25.08.2013, 14:02     Сборка приложения NDK sample в Eclipse #11
ОК, разобрался. png пока тоже не нужен, ещё не дочитал до того места.
Проект собирается, видимо, я где-то случайно в мэйк-файле в имени библиотеки что-то ткнул. Скопировал ещё раз файл из примера - всё собралось без ошибок.

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

Цитата Сообщение от EVP Посмотреть сообщение
Совет:
Ты сейчас работаешь под виндовс, по всей видимости. Отлаживать нативные андроид программы под виндовс сложно. Поэтому можно сразу (со временем понадобится точно) освоить кроссплатформенное программирование. Рекомендую посмотреть в сторону PowerVR SDK. Очень удобно кроссплатформенные вещи делать: отладился в виндовс под студией, портировал под андроид. Разница только в коде привязки к конкретной системе.
Спасибо за совет. Потом посмотрю, как эту дочитаю. Я пока не планирую что-то создавать под андроид, просто чтоб мозги не закисали, взял эту книгу. Для расширения, так сказать, кругозора.
Yandex
Объявления
25.08.2013, 14:02     Сборка приложения NDK sample в Eclipse
Ответ Создать тему
Опции темы

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