[Spice-devel] Try to port spicec into Android

Alon Levy alevy at redhat.com
Fri Mar 4 00:36:50 PST 2011


On Fri, Mar 04, 2011 at 03:38:51PM +0800, Shuxiang Lim wrote:
> Hi all,
>    I'm trying these days to port spicec into Android.But it's a rather TOUGH
> way to go because the structure of spicec and android are desperately
> inappropriate:the linux version of spicec is based on the X11,which is not
> available in Android,thus the UI of spicec should be rewritten from
> scratch...More troublesome is that the UI part and data part in current

Haven't looked at your proposal below yet, but did you check the spice-gtk
work? maybe it is easier to start from that? are gtk libraries available on
android? not talking about X. spice-gtk has objects for connection and channels
that afaik don't do any output, that's separate from the actual widget that
uses X. Also, gtk 3 has backends - did anyone do a backend for android?

Since going forward we plan to ditch the spicec client, that would be really
preffered. Now that I see what you have planned it sounds good, but better
to use spice-gtk.

of course that's not to say we won't love to see this working anyway :)

> spicec is entangled in the hierarchical system in C++! So my plan is this:
> first split the spicec into two parts,data and UI,transform the data part
> into libspicec.so;then rewrite the UI part in JAVA. Besides, I should also
> tinker some problems caused by the Crippled NDK C++ support and the Lamed
> bionic c lib in android .
>    And now the first step is roughly done,hence the change of the spicec
> structure:
>    From
>                                                             |-->playback
> thread
>                                                             |-->cursor
> thread
> spicec:spicec process(application process)-->main thread->|-->*record thread
> *
>                                                             |-->inputs
> thread
>                                                             |-->display
> thread
> To:
> ===========================>
>                          |-->libspicec.so:application thread-->main
> thread------>|
>                          |
> |
>                          |              |<--display thread<--|
>      |
>                          |         |--->|<--cursor
> thread<---|<------------------|
>                          |         |    |<--inputs thread<---|
> spicec:spicec process--->|         |    |<--playback thread<-|
>                          |         |
>                          |         |
>                          |         |
> <---------------------------------------------|
>                          |
>       |
>                          |
>       |
>                          |-->spicec:platform
> thread------------------------------>|
> 
> The hierarchical relationship has been unleashed with one thread(record
> channel) deleted and two new threads (app and platform)  created. The first
> as the "data thread",the other as the "work thread" which is driven by the
> signals from the first thread as well as its sub threads and requested to do
> the UI-related work:
> 
> platform thread:------------>blocked and waiting:-->job
> request-<--------------|
>                                           |           |
>                         |
>                                           ^           |
>                         |
>                                           |
> |                         |
>                                           |<----------|-<-|
>                     |
>                                                       |   |
>                 |
>         platform thread over<----------if(job==die)<--| send req. blocked
> and waiting
>                                               |           ^ |
>     |
>                                               |           | |
>        ^
>                                               |           | |
> _________|_________
>                                               |           | |
> | app/plbk/cusor
> thd
>              |<---job done----dojob()<--else--|           | |->go on->|
> __________________
>              |                                            |
>              |------------------------------->feed back-->|
> 
> 
> So the next work is to expose the native JNI interface in platform thread to
> the UI written in Android SDK. I try to use the UI
> frame of AndroidVNCViewer in
> code.google.com/p/*android*-*vnc*-viewer/,then the work of platform
> thread will be replaced by UI but the msg
> communication to libspicec will be remained. That's the easiest way I can
> envisage except rewriting all parts in spicec from scratch.
> It's tough too, for I have poor experiance in Java...
>    Anyway, is there any other guy working on this? Is my way feasible??Any
> Ideas or help is appreciated.

See above for ideas, don't read them as a criticism, I think this is fantastic
what you've done so far. I remember someone posting "we are working on andriod
in our spare time" post to spice-devel, please grep the archive.

Alon

>    Best regards.

> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list