[ 
https://issues.apache.org/jira/browse/PROTON-298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Cliff Jansen updated PROTON-298:
--------------------------------

    Attachment: PnTest.java
                main.xml
                AndroidManifest.xml
                Android.mk

Some files of interest
                
> proton-c on Android
> -------------------
>
>                 Key: PROTON-298
>                 URL: https://issues.apache.org/jira/browse/PROTON-298
>             Project: Qpid Proton
>          Issue Type: Wish
>          Components: proton-c
>    Affects Versions: 0.5
>         Environment: Android + swig + proton-c
>            Reporter: Cliff Jansen
>            Assignee: Cliff Jansen
>            Priority: Trivial
>         Attachments: AndroidManifest.xml, Android.mk, main.xml, PnTest.java
>
>
> Here are notes on getting proton-c to work on Android in case it is of use or 
> provides insight from the mobile environment.  I may try iOS next, but first 
> I need access to a development box and pay the Apple developer fee.  Since I 
> could try Android with spare parts at hand, it goes first and is the subject 
> of this JIRA.
> Aside from fudging a build, the actual C portability issues boiled down to:
>   no uuid, opennsl support.
>   Missing getprotobyname().
> What I did:
>  - download the Android NDK and SDK for Linux
>  - confirm installed Java and ant were appropriate
>  - started with the Swig and Android C example 
> (http://www.swig.org/Doc2.0/Android.html)
>  - update the swig example to mimic the proton recv.c example using JNI to 
> qpid-proton
> I opted to run without eclipse.  Once I could build and run the swig example 
> app, I looked at the resulting project and weighed the pros and cons of 
> calling cmake from ant or vice versa.
> In the end I cheated, just to get something to work.  I reasoned that the 
> Android build should closely approximate a Linux build so I merely did two 
> builds and synced things by hand from the Linux build to the Android one.  
> Ignoring the blind alleys I walked down, here is the basic process:
> Download trunk and do a normal Linux cmake, "make VERBOSE=1" (and save the 
> output).
> Elsewhere, create a new Android project:
>   android create project --target 1 --name PnTest --path ./pntest --activity 
> PnTest --package org.apache.qpid.pnswig
> This creates the stub tree to build from.  Now update and populate, put the 
> proton trunk in the appropriate "jni" directory, copy generated files from 
> the linux build.
>   mkdir pntest/jni
>   (cd pntest/jni; tar xf /path/to/pn.1467710.tar && mv trunk pn)
>   mkdir -p pntest/jni/pn/bld_copy/proton-c
>   cp /path/to/linux/trunk/build/proton-c/*.h pntest/jni/pn/bld_copy/proton-c
> Use the same swig command from the Linux build adjusted for the changed 
> include directory names
>   mkdir -p pntest/src/org/apache/qpid/proton/jni
>   /usr/bin/swig -java -package org.apache.qpid.proton.jni -outdir 
> pntest/src/org/apache/qpid/proton/jni 
> -I/b/xtra/drd/cj/pntest/pntest/jni/pn/bld_copy/proton-c 
> -I/b/xtra/drd/cj/pntest/pntest/jni/pn/proton-c/include -o javaJAVA_wrap.c 
> /b/xtra/drd/cj/pntest/pntest/jni/pn/proton-c/bindings/java/java.i
>   mv javaJAVA_wrap.c pntest/jni/javaJAVA_wrap.c
> After this, the steps are the same as the basic swig example program.
>   update AndroidManifest.xml for minSdkVersion and android.permission.INTERNET
>   update the main source file and resources to use proton
>   create an Android.mk based on Linux builds for qpid-proton
>   update pntest/jni/pn/proton-c/src/posix/driver.c for API problem:
>     getprotobyname("tcp")->p_proto is not supported, use "IPPROTO_TCP"
> Build it
>   (cd pntest; ndk-build)
>   (cd pntest; ant debug)
> Install on your device and play :-)
> The getprotobyname outage was surprisingly found at runtime (in the system 
> log), it linked fine.  The openssl outage was found at compile time.
> In Android.mk, the choice of flags (-DUSE_CLOCK_GETTIME -DUSE_UUID_GENERATE 
> -DUSE_STRERROR_R -DUSE_ATOLL -std=gnu99) were stolen from the Linux cmake 
> build output.  The uuid_hack portion just pulls in a linux implementation; I 
> won't discuss that except to say that a little searching can point you to a 
> less ugly way to do it.  Similarly, people are rolling their own openssl 
> support.
> Also, people are using cmake to cross compile Android binaries, so there is 
> surely a much cleaner way to build libqpid-proton.so and the swig bits and 
> just drop them into the Android project.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to