Thoughts on Java files and forward compatibility?

BogDan bog_dan_ro at yahoo.com
Wed Jul 6 13:32:22 CEST 2011


Agreed, lets plan a meeting then, I can be on IRC tomorrow starting with 7:00 PM CET. 

Cheers,
BogDan.


----- Original Message -----
> From: Lauri Laanmets <lauri.laanmets at proekspert.ee>
> To: BogDan <bog_dan_ro at yahoo.com>
> Cc: "necessitas-devel at kde.org" <necessitas-devel at kde.org>
> Sent: Wednesday, July 6, 2011 1:11 PM
> Subject: Re: Thoughts on Java files and forward compatibility?
> 
> Hi
> 
> I like the Semaphore idea - will go that way definitely. Somehow I feel 
> that we should cooperate more (not to copy our work), write some general 
> Java classes (Runnable, BroadcastReceiver, etc...) that can later be 
> used purely from C++ side. I see a need for a meeting.
> 
> Regards,
> Lauri
> 
> 
> On 6.07.2011 12:08, BogDan wrote:
>>  Hi,
>> 
>>  It seems you are right,  DexClassLoader needs a path to extract the .dex 
> files, so please use cache folder (please make sure you create that folder 
> before using it, because it may not exists).
>> 
>>  You can't get rid of java part and stats using android app glue thing 
> because you still need Ministro to tell your application where it can find the 
> QtLibs. Also that thing was introduced too late (android-9) and we can't use 
> it.
>> 
>>  I'm using something similar (Activity.runOnUiThread [1]) to run 
> commands on ui thread, if you want to "synchronize" that call, I 
> recommend you to use a semaphore :
>> 
>>  class MyClass
>>  {
>>  private final Semaphore m_sem =new Semaphore(1);
>> 
>>  public void registerReciever() throws InterruptedException
>>  {
>>           QtApplication.mainActivity().runOnUiThread( new Runnable(){ 
>>                      @Override
>>                      public void run(){
>>                           // do your stuff here
>>                           m_sem.release(); // the wait is over
>>                    }
>>           });
>>           m_sem.acquire(); // wait until the command is fired
>>  }
>>  }
>> 
>> 
>> 
>>  Cheers,
>>  BogDan.
>> 
>>  [1] 
> http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)
>> 
>>>  Hi
>>> 
>>>  I have used .jar files and in that case DexClassLoader definitely needs 
> the temp folder - it starts even whining when the exact sub folder doesn't 
> exist. Since there will be several .dex files (IMHO) I guess we need to keep 
> them in .jar. I'll try to use the cache, thanxs.
>>> 
>>>  About the Thread - that's a tricky one, yes. Current android Qt app 
> runs in a separate (clean) thread and that by default doesn't have the 
> Android Looper prepared. And that's actually OK because looper can be used 
> only if it creates the event loop itself. IMHO we should use the android app 
> glue (like in the "native-activity" sample in NDK without ANY java 
> files) and port the QApplication.exec into Android event looper. But of course I 
> don't know much about that and maybe I'm totally wrong - excuse me if I 
> am.
>>> 
>>>  So my problem was while executing 
> "BluetoothAdapter.getDefaultAdapter()". Somewhere in the Android 
> library, it needs to create a Handler and that execution must be in the main UI 
> thread and not in the Qt thread.  So I had no other option than to implement a 
> general JNIRunnable so that I can register a C++ function into it and pass it on 
> to the main Activity to be executed. It works :) The only trouble is that 
> I'm not in control WHEN Android chooses to execute it. So I have to block 
> everything for a short time in Qt Bluetooth API. It's OK for me but I'm 
> a bit reluctant on releasing such a library.
>>> 
>>>  Regards
>>>  Lauri Laanmets
>>> 
>>> 
>>>  On 6.07.2011 8:55, BogDan wrote:
>>>>  Hi Lauri,
>>>> 
>>>> 
>>>>  AFAIK that folder is not used, I recommend you to use  getCacheDir( 
> ) [1].
>>>> 
>>>>  Regarding the error, I think you are trying to create that object 
> from Qt thread, you should use UI thread for that job.
>>>>  Cheers,
>>>>  BogDan.
>>>> 
>>>>  [1] 
> http://developer.android.com/reference/android/content/Context.html#getCacheDir()
>>>> 
>>>> 
>>>>  P.S. Sorry for the slow replay.
>>>> 
>>>> 
>>>>  ----- Original Message -----
>>>>>  From: Lauri Laanmets<lauri.laanmets at proekspert.ee>
>>>>>  To: BogDan<bog_dan_ro at yahoo.com>
>>>>>  Cc: necessitas-devel at kde.org
>>>>>  Sent: Tuesday, July 5, 2011 2:11 AM
>>>>>  Subject: Re: Thoughts on Java files and forward compatibility?
>>>>> 
>>>>>  Evening
>>>>> 
>>>>>  I see... ok, having .jar files in ministro folder is ok but the 
> DexClassLoader
>>>>>  also needs a "temp" folder. Any ideas where to direct 
> that?
>>>>> 
>>>>>  I made a prototype of generic JNIBroadcastReceiver, one can 
> just inherit and
>>>>>  implement "onReceive" function, have a look if 
> interested:
>>>>> 
> https://qt.gitorious.org/~pcspets/qt-mobility/proekspert-android-qt-mobility/commit/c5820d506b35e0e1b1bff8a4839899c01ab2722f
>>>>> 
>>>>> 
>>>>>  And I also need help, I keep getting the following error, any 
> experience?:
>>>>> 
>>>>>  W/dalvikvm( 1513): threadid=15: thread exiting with uncaught 
> exception
>>>>>  (group=0x4001e390)
>>>>>  E/AndroidRuntime( 1513): Uncaught handler: thread Thread-11 
> exiting due to
>>>>>  uncaught exception
>>>>>  E/AndroidRuntime( 1513): java.lang.RuntimeException: Can't 
> create handler
>>>>>  inside thread that has not called Looper.prepare()
>>>>>  E/AndroidRuntime( 1513):     at
>>>>>  android.os.Handler.<init>(Handler.java:121)
>>>>>  E/AndroidRuntime( 1513):     at
>>>>> 
> android.bluetooth.BluetoothAdapter$1.<init>(BluetoothAdapter.java:807)
>>>>>  E/AndroidRuntime( 1513):     at
>>>>> 
> android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:806)
>>>>>  E/AndroidRuntime( 1513):     at
>>>>> 
> android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:298)
>>>>>  E/AndroidRuntime( 1513):     at 
> dalvik.system.NativeStart.run(Native Method)
>>>>> 
>>>>>  Lauri
>>>>> 
>>>>> 
>>>>> 
>>>>>  ----- Original Message -----
>>>>>  I know that class, the "problem" now is to redesign 
> the current Java
>>>>>  part :)
>>>>>  Because the java which will be shipped with your application 
> should be VERY small and VERY stable, it should only search for Ministro and 
> create
>>>>>  the main activity. The rest of java should be loaded from 
> Ministro's
>>>>>  repository.
>>>>> 
>>> 
>>> 
>>> 
>


More information about the Necessitas-devel mailing list