Autore Topic: Settaggio IDE Android + OpenCL  (Letto 543 volte)

Offline MRK89

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1
Settaggio IDE Android + OpenCL
« il: 25 Giugno 2015, 15:58:33 CEST »
0
Salve a tutti,
motivo tesi in Ingegneria Informatica M, per la quale l'obiettivo finale sarà creare un sistema simil KinectFusion su android, sono interessato al settaggio di un IDE per lo sviluppo di tale applicazione. Ho conoscenza e ho a disposizione VS2013 e Eclipse su Windows 8.1.

Il problema principale è far coesistere codice java dell'app e C99 con cui lavora OpenCL (framework per la programmazione parallela su GPU).

Sul forum ho trovato una discussione vecchia che si avvicina all'argomento  Tutorial per prima app con Android NDK. - Android Developers Italia  (NDK?!?) ma non riesco a metterla in pratica, e forse potrebbe essere obsoleta vista la data di pubblicazione.

Se qualcuno sviluppa in questo ambito ed è a conoscenza di una configurazione di programmazione stabile e comoda (per esempio anche per i debug), o qualsiasi altro consiglio o guida, sarà ben accetto!

Grazie!!!

EDIT: ho trovato alcune guide che aiutano a costruire delle librerie con ndk da inserire all'interno del progetto android per integrare il codice "c". La prima è una serie di una decina di video su youtube https://www.youtube.com/watch?v=3AFP44ChNh4   .  La seconda che sembra ripercorrere lo stesso procedimento si trova a questo link: Jni Tutorial for android - Stack Overflow
Sono riuscito a creare la libreria "nomeLib.so" tramite l'ndk-build e sembra filare tutto liscio, se non che quando cerco di eseguire il metodo native va in crash l'applicazione dicendo che non riesce a trovare l'implementazione del metodo native appunto. Tramite adb shell sono andato nella cartella "/data/data/com.example.mioprogetto/lib" e la libreria .so è caricata correttamente.
Per informazione aggiuntiva sto usando android 5.0.1 API 21.
« Ultima modifica: 27 Giugno 2015, 00:01:18 CEST da MRK89 »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Settaggio IDE Android + OpenCL
« Risposta #1 il: 28 Giugno 2015, 09:06:25 CEST »
0
Prima di tutto non riporti una informazione importante il logcat del errore. Se esiste una libreria dinamica non significa che in questa libreria sia  presente la funzione nativa compatibile con la chiamata Java. Bisogna rispettare le specifiche JNI usate da Android molto rigide e precise altrimenti non funziona e l'errore viene sempre riportato nel logcat. NDK come SDK di Android, viene continuamente perfezionato e di conseguenza ci sono dei cambiamenti che rendono le vecchie guide non più valide. Consiglio sempre di leggere la documentazione presente nella ultima versione e iniziare a studiare gli esempi più semplici presenti sempre nel NDK per capire come funzionano.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline MRK89

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1
Re:Settaggio IDE Android + OpenCL
« Risposta #2 il: 28 Giugno 2015, 09:35:59 CEST »
0
Prima di tutto non riporti una informazione importante il logcat del errore. Se esiste una libreria dinamica non significa che in questa libreria sia  presente la funzione nativa compatibile con la chiamata Java. Bisogna rispettare le specifiche JNI usate da Android molto rigide e precise altrimenti non funziona e l'errore viene sempre riportato nel logcat. NDK come SDK di Android, viene continuamente perfezionato e di conseguenza ci sono dei cambiamenti che rendono le vecchie guide non più valide. Consiglio sempre di leggere la documentazione presente nella ultima versione e iniziare a studiare gli esempi più semplici presenti sempre nel NDK per capire come funzionano.

Inviato dal mio Nexus 5 utilizzando Tapatalk

Hai ragione ecco il logcat:


06-28 07:32:54.376: D/OpenGLRenderer(914): Render dirty regions requested: true
06-28 07:32:54.400: D/(914): HostConnection::get() New Host Connection established 0xaf2fe660, tid 914
06-28 07:32:54.407: D/Atlas(914): Validating map...
06-28 07:32:54.728: D/(914): HostConnection::get() New Host Connection established 0xaf2feab0, tid 933
06-28 07:32:54.747: I/OpenGLRenderer(914): Initialized EGL, version 1.4
06-28 07:32:54.799: D/OpenGLRenderer(914): Enabling debug mode 0
06-28 07:32:54.821: W/EGL_emulation(914): eglSurfaceAttrib not implemented
06-28 07:32:54.821: W/OpenGLRenderer(914): Failed to set EGL_SWAP_BEHAVIOR on surface 0xa7d36800, error=EGL_SUCCESS
06-28 07:32:58.908: W/EGL_emulation(914): eglSurfaceAttrib not implemented
06-28 07:32:58.909: W/OpenGLRenderer(914): Failed to set EGL_SWAP_BEHAVIOR on surface 0xa7d36800, error=EGL_SUCCESS
06-28 07:33:19.926: E/art(914): No implementation found for long com.example.provandk.ProvaLib.incN(long) (tried Java_com_example_provandk_ProvaLib_incN and Java_com_example_provandk_ProvaLib_incN__J)
06-28 07:33:20.033: W/EGL_emulation(914): eglSurfaceAttrib not implemented
06-28 07:33:20.034: W/OpenGLRenderer(914): Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6fb5700, error=EGL_SUCCESS
06-28 07:33:20.152: E/AndroidRuntime(914): FATAL EXCEPTION: AsyncTask #1
06-28 07:33:20.152: E/AndroidRuntime(914): Process: com.example.provandk, PID: 914
06-28 07:33:20.152: E/AndroidRuntime(914): java.lang.RuntimeException: An error occured while executing doInBackground()
06-28 07:33:20.152: E/AndroidRuntime(914):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
06-28 07:33:20.152: E/AndroidRuntime(914):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.lang.Thread.run(Thread.java:818)
06-28 07:33:20.152: E/AndroidRuntime(914): Caused by: java.lang.UnsatisfiedLinkError: No implementation found for long com.example.provandk.ProvaLib.incN(long) (tried Java_com_example_provandk_ProvaLib_incN and Java_com_example_provandk_ProvaLib_incN__J)
06-28 07:33:20.152: E/AndroidRuntime(914):    at com.example.provandk.ProvaLib.incN(Native Method)
06-28 07:33:20.152: E/AndroidRuntime(914):    at com.example.provandk.ProvaActivity$1.doInBackground(ProvaActivity.java:68)
06-28 07:33:20.152: E/AndroidRuntime(914):    at com.example.provandk.ProvaActivity$1.doInBackground(ProvaActivity.java:1)
06-28 07:33:20.152: E/AndroidRuntime(914):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-28 07:33:20.152: E/AndroidRuntime(914):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-28 07:33:20.152: E/AndroidRuntime(914):    ... 4 more
06-28 07:33:20.343: W/art(914): Suspending all threads took: 9.254ms
06-28 07:33:20.384: I/art(914): Background sticky concurrent mark sweep GC freed 1604(123KB) AllocSpace objects, 0(0B) LOS objects, 25% free, 735KB/984KB, paused 32.206ms total 195.015ms
06-28 07:33:26.196: E/WindowManager(914): android.view.WindowLeaked: Activity com.example.provandk.ProvaActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{7c98e V.E..... R......D 0,0-383,96} that was originally added here
06-28 07:33:26.196: E/WindowManager(914):    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
06-28 07:33:26.196: E/WindowManager(914):    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
06-28 07:33:26.196: E/WindowManager(914):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
06-28 07:33:26.196: E/WindowManager(914):    at android.app.Dialog.show(Dialog.java:298)
06-28 07:33:26.196: E/WindowManager(914):    at android.app.ProgressDialog.show(ProgressDialog.java:116)
06-28 07:33:26.196: E/WindowManager(914):    at android.app.ProgressDialog.show(ProgressDialog.java:99)
06-28 07:33:26.196: E/WindowManager(914):    at com.example.provandk.ProvaActivity.onClick(ProvaActivity.java:58)
06-28 07:33:26.196: E/WindowManager(914):    at android.view.View.performClick(View.java:4756)
06-28 07:33:26.196: E/WindowManager(914):    at android.view.View$PerformClick.run(View.java:19749)
06-28 07:33:26.196: E/WindowManager(914):    at android.os.Handler.handleCallback(Handler.java:739)
06-28 07:33:26.196: E/WindowManager(914):    at android.os.Handler.dispatchMessage(Handler.java:95)
06-28 07:33:26.196: E/WindowManager(914):    at android.os.Looper.loop(Looper.java:135)
06-28 07:33:26.196: E/WindowManager(914):    at android.app.ActivityThread.main(ActivityThread.java:5221)
06-28 07:33:26.196: E/WindowManager(914):    at java.lang.reflect.Method.invoke(Native Method)
06-28 07:33:26.196: E/WindowManager(914):    at java.lang.reflect.Method.invoke(Method.java:372)
06-28 07:33:26.196: E/WindowManager(914):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
06-28 07:33:26.196: E/WindowManager(914):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)



Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Settaggio IDE Android + OpenCL
« Risposta #3 il: 29 Giugno 2015, 09:27:34 CEST »
0
Non serve quotare tutto.

L'errore è questo:

Citazione
E/AndroidRuntime(914): Caused by: java.lang.UnsatisfiedLinkError: No implementation found for long com.example.provandk.ProvaLib.incN(long)

Non trova l'implementazione nativa del metodo "long com.example.provandk.ProvaLib.incN(long)".
adb logcat | tee /tmp/logcat | grep TAG

Offline MRK89

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1
Re:Settaggio IDE Android + OpenCL
« Risposta #4 il: 30 Giugno 2015, 20:20:33 CEST »
0
Si sapevo che era quello l'errore, comunque ho risolto, avevo dimenticato di impostare il percorso dell'ndk nelle proprietà del progetto!