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

выделение и освобождение памяти для нативных функций - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Работа с камерой http://www.cyberforum.ru/android-dev/thread761799.html
Попытался поработать с камерой, но при попытке фотографирования приложение вылетает, при этом камера в эмуляторе работает, но почему то не использует вебку, хотя я и указал в Back camera вариант WebCam0. public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...
Android Добавление записи в БД (использование put) Необходимо в БД добавить запись с данными введенными в активити. Сама БД создана. Далее функция добавления После комментирования кусков кода выявлено что ошибка возникает из-за использования newValues.put EditText txt; RadioButton r0; CheckBox CBdone; ContentValues newValues = new ContentValues(); int choice_value=0; int done_value=0; public void Click_save(View v) { http://www.cyberforum.ru/android-dev/thread761722.html
Установка по для разработки под Android Android
Испытываю трудности по установке по на windows x64.. Ставлю JDK x64 после пытался из exe SDK android но не находит JDK... Поставил из zip архива вместе с eclipse и скачал в eclipse версии нужные мне андроида(а точнее все на всякий случай) И при создании нового проекта зависает, когда пытаюсь его создать.. В чем может быть причина, кто может помочь? готов оплатить устал с этим возиться уже....
Android Сборка приложения NDK sample в Eclipse
Здравствуйте. Пытаюсь освоить программирование с использованием NDK. Хочу для начала собрать приложение из готового примера. В Eclipse открываю Android project from existing code. Указываю пример из NDK San-Angeles. Eclipse выдаёт ошибку Invalid project description В чём проблема?
Android Настройка Eclipse для работы с NDK http://www.cyberforum.ru/android-dev/thread761315.html
Итак, установил я NDK, SDK. В пакете с SDK есть и Eclipse со всеми плагинами. В настройках прописал пути до NDK и SDK. Создаю обычный Android Application Project. Правой кнопкой мыши на нём Android Tools--->Add Native Support... Ввожу название либы. В проекте появляется папка jni, в ней .cpp и Android.mk файлы. Нажимаю Export, ввожу ключи и тд. В итоге в консоли Eclips'а выдаёт это:
Android Посоветуйте планшет для тестирования приложений на андроид Решил разместить тут, т.к. мне не нужно мнение пользователя а нужно мнение программиста Какой посоветуете планшет в первую очередь для тестирования приложений андройда Собираюсь переходить на андроид делать 3д игрушки + программы для работы с смс и звонками Из планшетов по функционалу понравился Ritmix RMD-1050 http://www.ritmixrussia.ru/products/rmd-1050 подробнее

Показать сообщение отдельно
artemxl
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 3

выделение и освобождение памяти для нативных функций - Android

15.01.2013, 02:36. Просмотров 828. Ответов 0
Метки (Все метки)

Доброго времени суток.
Пытаюсь разобраться с использованием android-ndk. Столкнулся с такой проблемкой:
Нужно выделить буфер для использования на стороне jni, а затем освободить его.
Нашел вот такую реализацию:
функции на стороне jni:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
jobject Java_com_domain_applicationname_FFMpegWrapper_allocNative(JNIEnv* env, jobject thiz, jlong size)
{
void* buffer = malloc(size);
jobject directBuffer = (*env)->NewDirectByteBuffer(env, buffer, size);
jobject globalRef = (*env)->NewGlobalRef(env, directBuffer);
return globalRef;
}
void Java_com_domain_applicationname_FFMpegWrapper_freeNative(JNIEnv* env, jobject thiz, jobject globalRef)
{
void *buffer = (*env)->GetDirectBufferAddress(env, globalRef);
free(buffer);
(*env)->DeleteGlobalRef(env, globalRef);
}
На стороне Java делаю так:
Java
1
2
3
4
5
6
7
8
public class FFMpegWrapper {
.........
/** Выделить нативный буфер заданного размера*/
public static native ByteBuffer allocNative(long bufferSize);
 
/** Освободить нативный буфер*/
public static native void freeNative(ByteBuffer buffer);
}
На oncreate главного активити:
Java
1
2
3
4
5
long bufferSize = 1024;
ByteBuffer my_buffer = FFMpegWrapper.allocNative(bufferSize);
FFMpegWrapper.logFileInfo("/storage/sdcard0/movies/126_3_17.avi");//эту функцию не буду описывать она к делу не относится но работает это видно из логов ниже
//до сюда все работает норм
FFMpegWrapper.freeNative(my_buffer);//а вот тут получаем вылет из программы причем даже окошко исключения не показывается просто закрывается активити.
Вот Логкат при этом:

01-14 17:53:06.924: I/com.domain.tag(22249): initialize_passed
01-14 17:53:06.964: I/com.domain.tag(22249): openened
01-14 17:53:06.964: I/ttag(22249): 3270391527096277528
01-14 17:53:06.984: I/com.domain.tag(22249): File was opened
01-14 17:53:06.984: I/com.domain.tag(22249): File '/storage/sdcard0/Movies/126_3_17.avi', Codec avi
01-14 17:53:06.984: W/dalvikvm(22249): JNI WARNING: DeleteGlobalRef on non-global 0x4780001d (type=1)
01-14 17:53:06.984: I/dalvikvm(22249): "main" prio=5 tid=1 NATIVE
01-14 17:53:06.984: I/dalvikvm(22249): | group="main" sCount=0 dsCount=0 obj=0x41065568 self=0x40ebe9a0
01-14 17:53:06.984: I/dalvikvm(22249): | sysTid=22249 nice=0 sched=0/0 cgrp=apps handle=1074450224
01-14 17:53:06.984: I/dalvikvm(22249): | schedstat=( 74908625 168640538 138 ) utm=4 stm=2 core=0
01-14 17:53:06.999: I/dalvikvm(22249): #00 pc 00001260 /system/lib/libcorkscrew.so (unwind_backtrace_thread+27)
01-14 17:53:06.999: I/dalvikvm(22249): #01 pc 0005f904 /system/lib/libdvm.so (dvmDumpNativeStack(DebugOutputTarget const*, int)+35)
01-14 17:53:06.999: I/dalvikvm(22249): #02 pc 000537ac /system/lib/libdvm.so (dvmDumpThreadEx(DebugOutputTarget const*, Thread*, bool)+303)
01-14 17:53:06.999: I/dalvikvm(22249): #03 pc 00053846 /system/lib/libdvm.so (dvmDumpThread(Thread*, bool)+25)
01-14 17:53:06.999: I/dalvikvm(22249): #04 pc 00038e02 /system/lib/libdvm.so
01-14 17:53:06.999: I/dalvikvm(22249): #05 pc 000414da /system/lib/libdvm.so
01-14 17:53:06.999: I/dalvikvm(22249): #06 pc 0002f728 /data/data/ru.dzakhov.ffmpeg.test/lib/libmylib.so (Java_ru_dzakhov_ffmpeg_test_FFMpegWrapper_freeNative+25)
01-14 17:53:06.999: I/dalvikvm(22249): #07 pc 0001de70 /system/lib/libdvm.so (dvmPlatformInvoke+112)
01-14 17:53:06.999: I/dalvikvm(22249): #08 pc 0004d0c2 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+393)
01-14 17:53:06.999: I/dalvikvm(22249): #09 pc 0004f1dc /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+171)
01-14 17:53:06.999: I/dalvikvm(22249): #10 pc 000272a0 /system/lib/libdvm.so
01-14 17:53:06.999: I/dalvikvm(22249): #11 pc 0002bba8 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
01-14 17:53:06.999: I/dalvikvm(22249): #12 pc 0005faf6 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+373)
01-14 17:53:06.999: I/dalvikvm(22249): #13 pc 0006709c /system/lib/libdvm.so
01-14 17:53:06.999: I/dalvikvm(22249): #14 pc 000272a0 /system/lib/libdvm.so
01-14 17:53:06.999: I/dalvikvm(22249): #15 pc 0002bba8 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
01-14 17:53:06.999: I/dalvikvm(22249): #16 pc 0005f830 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+271)
01-14 17:53:06.999: I/dalvikvm(22249): #17 pc 000496b2 /system/lib/libdvm.so
01-14 17:53:06.999: I/dalvikvm(22249): #18 pc 0004c44e /system/lib/libandroid_runtime.so
01-14 17:53:06.999: I/dalvikvm(22249): #19 pc 0004d556 /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+389)
01-14 17:53:07.004: I/dalvikvm(22249): #20 pc 00000dce /system/bin/app_process
01-14 17:53:07.004: I/dalvikvm(22249): #21 pc 00017120 /system/lib/libc.so (__libc_init+35)
01-14 17:53:07.004: I/dalvikvm(22249): at ru.dzakhov.ffmpeg.test.FFMpegWrapper.freeNative(Native Method)
01-14 17:53:07.004: I/dalvikvm(22249): at ru.dzakhov.ffmpeg.test.MainActivity.onCreate(MainActivity.java:39)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.Activity.performCreate(Activity.java:5184)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.ActivityThread.access$600(ActivityThread.java:140)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-14 17:53:07.004: I/dalvikvm(22249): at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 17:53:07.004: I/dalvikvm(22249): at android.os.Looper.loop(Looper.java:137)
01-14 17:53:07.004: I/dalvikvm(22249): at android.app.ActivityThread.main(ActivityThread.java:4898)
01-14 17:53:07.004: I/dalvikvm(22249): at java.lang.reflect.Method.invokeNative(Native Method)
01-14 17:53:07.004: I/dalvikvm(22249): at java.lang.reflect.Method.invoke(Method.java:511)
01-14 17:53:07.004: I/dalvikvm(22249): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-14 17:53:07.004: I/dalvikvm(22249): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-14 17:53:07.004: I/dalvikvm(22249): at dalvik.system.NativeStart.main(Native Method)
01-14 17:53:07.004: E/dalvikvm(22249): VM aborting
01-14 17:53:07.004: A/libc(22249): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 22249 (hov.ffmpeg.test)


Помогите понять что я не так делаю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru