Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
wrun
1 / 1 / 1
Регистрация: 07.02.2013
Сообщений: 49
#1

Использование нативных библиотек - Программирование Android

08.09.2014, 17:23. Просмотров 2441. Ответов 7
Метки нет (Все метки)

Добрый день. Решил попробовать написать приложение для личных нужд, нашел хорошее описание и уперся в проблему:

http://masl.cis.gvsu.edu/2012/01/25/android-echoprint/

Тут подключают Нативную библиотеку System.loadLibrary("echoprint-jni");

Использовать библиотеки jar я научился, но никак не могу понять в чем фишка таких библиотек и зачем всё так сложно!?

Я разрабатываю под Android Studio. А там пример под Eclipse. Можно ли в нем собрать (хоть у меня и там не получилось) или надо (как я почитал) "рядом" со своим проектом собирать?

В интернете читал про NDK но понимания не сложилось ( Подскажите кто может
http://www.cyberforum.ru/android-dev/thread1725129.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2014, 17:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Использование нативных библиотек (Программирование Android):

Использование библиотек C# для Android
У меня есть библиотека, написанная на С# и отлично работающая. Чтобы переписать...

Проект и использование внешних библиотек
привет) хочу спросить по поводу android stuudio/// для работы с pdf-файлами...

Gradle - конфликт библиотек
Добрый день. Пытаюсь сделать приложение для push собщений от гугл. Добавляю...

Подключение библиотек к проекту
Привет. Я работаю с .NET (C# и С++), хочу попробовать что то поделать для...

Подключение внешних библиотек
Доброго времени. И снова я к сообществу за помощью. Подскажите, как...

7
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
08.09.2014, 18:24 #2
Эх, я уже год ищу подобную инфу...
Если в 2х словах:
NDK быстрее явы. От 2х до 10 раз. А значит и батарейка дольше держится и успеваю больше.
С++ нельзя (тяжело) взломать, получив или изменив исходники. В яве можно
Под С++ есть куча старых исходников которые лень (да и глупо) перенабирать на яве.
Работал с ними (раньше) в еклипсе и (теперь) в студии. Сложного почти ничего нет. Качается НДК с официалки. Запускается прямо из консоли. По идее этого хватит для сборки чужих "идеальных" исходников.
Если же писать с нуля... Я сам только начал приближаться к этому! Надо знать с++, а он раз в 5 (минимум) сложнее чем ява.

Добавлено через 3 минуты
А что делает ЭТА библиотека? Понял что связана с микрофоном и имеет некий сервер, но дальше не читал...
0
wrun
1 / 1 / 1
Регистрация: 07.02.2013
Сообщений: 49
08.09.2014, 22:31  [ТС] #3
Эта либа генерирует некий хэш код песни, что бы потом можно было найти ее дубликат или название через API
0
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
10.09.2014, 18:30 #4
wrun, Так а в чём собственно проблема? Конкретезируйте вопрос.

Добавлено через 1 минуту
есть шикарная серия уроков по этой теме http://www.youtube.com/watch?v=YvCRlJToCAg
если язык позволяет можешь глянуть
0
wrun
1 / 1 / 1
Регистрация: 07.02.2013
Сообщений: 49
21.09.2014, 13:17  [ТС] #5
maxon887, проблема в том что я не понимаю как использовать такие библиотеки.

В своём проекте я использовал некие .jar библиотеки, но с ними проще, в чем специфика .so - никак не могу понять.

Получаю вот такую ошибку при попытке использования:
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load echoprint-jni: findLibrary returned null
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
09-21 13:08:10.489  18966-18966/net.wrun.izumvk E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:2192)
            at android.view.View.performClick(View.java:2533)
            at android.view.View$PerformClick.run(View.java:9320)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:150)
            at android.app.ActivityThread.main(ActivityThread.java:4385)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at android.view.View$1.onClick(View.java:2187)
************at android.view.View.performClick(View.java:2533)
************at android.view.View$PerformClick.run(View.java:9320)
************at android.os.Handler.handleCallback(Handler.java:587)
************at android.os.Handler.dispatchMessage(Handler.java:92)
************at android.os.Looper.loop(Looper.java:150)
************at android.app.ActivityThread.main(ActivityThread.java:4385)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:507)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
************at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ExceptionInInitializerError
            at net.wrun.izumvk.MyActivity.test(MyActivity.java:758)
            at net.wrun.izumvk.MyActivity.btnTest1Clk(MyActivity.java:283)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:507)
************at android.view.View$1.onClick(View.java:2187)
************at android.view.View.performClick(View.java:2533)
************at android.view.View$PerformClick.run(View.java:9320)
************at android.os.Handler.handleCallback(Handler.java:587)
************at android.os.Handler.dispatchMessage(Handler.java:92)
************at android.os.Looper.loop(Looper.java:150)
************at android.app.ActivityThread.main(ActivityThread.java:4385)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:507)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
************at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.UnsatisfiedLinkError: Couldn't load echoprint-jni: findLibrary returned null
            at java.lang.Runtime.loadLibrary(Runtime.java:429)
            at java.lang.System.loadLibrary(System.java:554)
            at net.wrun.izumvk.Codegen.<clinit>(Codegen.java:13)
************at net.wrun.izumvk.MyActivity.test(MyActivity.java:758)
************at net.wrun.izumvk.MyActivity.btnTest1Clk(MyActivity.java:283)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:507)
************at android.view.View$1.onClick(View.java:2187)
************at android.view.View.performClick(View.java:2533)
************at android.view.View$PerformClick.run(View.java:9320)
************at android.os.Handler.handleCallback(Handler.java:587)
************at android.os.Handler.dispatchMessage(Handler.java:92)
************at android.os.Looper.loop(Looper.java:150)
************at android.app.ActivityThread.main(ActivityThread.java:4385)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:507)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
************at dalvik.system.NativeStart.main(Native Method)


Я понимаю что наверное надо сесть, и изучать всё с нуля, но со всем остальным так хорошо получилось, хотелось бы продвинуться в этом месте...
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
22.09.2014, 02:18 #6
Советую написать сначала простые библиотеки с нуля по примерам. Легче будет понять технологию. СО файлы бывают под разные версии процов. Их нужно компилировать. Потом нужно подключать в правильных местах с правильными именами и параметрами. Любая мелочь - и глобальная ошибка без явных обьяснений... "FATAL EXCEPTION: Could not execute method of the activity" = чой-то не так! Не смог вызвать метод - не там лежит, название не то, параметры не совпали... Или даже ошибка в сишном коде. Даже деление на ноль в си или обращение к несуществующему файлу, в яве будет смотреться именно так!
0
wrun
1 / 1 / 1
Регистрация: 07.02.2013
Сообщений: 49
23.09.2014, 15:15  [ТС] #7
Вроде разобрался, хотя в голове всё равно не улеглось пока, но откомпилить удалось - буду двигаться дальше!
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
23.09.2014, 21:27 #8
Цитата Сообщение от wrun Посмотреть сообщение
Вроде разобрался, хотя в голове всё равно не улеглось пока, но откомпилить удалось - буду двигаться дальше!
Я разобрался где-то пол года назад, но далеко не продвинулся... Как Вы наверно поняли, компиляция идет ОЧЕНЬ долго! Минимум 30-40 секунд до тестов на устройстве. Иногда все 50-60. Я зашел с другой стороны... Графика мне пока не особо нужна, а если ее отключить то справится виндовая консоль для отладки. Установил MinGW и наплодил Win/NDK совместимых классов. В винде от компиляци до вывода результата проходит максимум 8-10 секунд. На простых примерах 3 секунды... Возможна "поблочная сборка"(перекомпиливаются только изменившиеся файлы). Методика формирования DLL очень похоже на структуру NDK библиотек.

Использую пока только для простой криптографии и защищенных от взлома процедур. Но очень тяжело продвигается...
0
23.09.2014, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2014, 21:27
Привет! Вот еще темы с решениями:

GetSupportLoaderManager и импорт support библиотек
Помогите разобраться, плз. Что-то с импортом библиотек, но что именно понять...

Android studio версии библиотек?
Недавно перекинул на мобильный телефон апк файл. Попробывал запустить, пишет...

Установка библиотек в android-studio
Всем привет,есть небольшая проблема.Нашёл один интересный...

Подключение http библиотек в android studio
Добрый день. android studio создал проект, авторизация пользователя с post...


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

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

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