Hi Adriano, Thanks for the detailed summary of your modifications and how to get them running. These past few days I've been trying to get the calculator-android project running as an "Android application." Below is a description of what I've done, it is based on the steps you detailed for getting it to run. Then there are a few questions, any help would be greatly appreciated.
1. Downloaded the modified code from [1] and installed as shown below: svn checkout https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/ cd mobile-android mvn clean install -Dtest=no mvn -Peclipse eclipse:eclipse -Dtest=no 2. Downloaded SCA modules from [2] and installed as shown below: svn checkout --revision 643746 https://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules cd modules mvn clean install -Dtest=no mvn -Peclipse eclipse:eclipse -Dtest=no 3. Created a new eclipse workspace and set the M2_REPO variable as shown below: mvn -Declipse.workspace=/Users/.../workspace eclipse:add-maven-repo 4. Imported projects from step 1, this resulted in 12 imported module projects. The remaining 3 projects I think are Android projects and not "normal" eclipse projects, since they don't have a ".project" file. These are: calculator-android host-android core-android To import them I created an "AndroidManifest.xml" file and imported them as documented in [3]. This worked for calculator-android but not for host-android or core-android. Looking into the directory structure and files for the last two, I take it they're not Android projects. I'm trying to figure out if they're part of the calculator-android project. 5. Imported projects from step 2. After importing, all module projects have errors. I tried including the Android Library on a few module projects to fix the errors but they're still showing up. These errors state the following: The project cannot be built until the build errors are resolved. I also have errors on the "AndroidManifest.xml" in "android-jdk-classes" stating that 'calculator.android' does not exist (even though I imported it). Additionally, I have an error caused as a result of not importing the 'tuscany-databinding-saxon' module project. It states the following: Project 'tuscany-implementation-xquery' is missing required Java project: 'tuscany-databinding-saxon' Some questions... - Are host-android and core-android a part of calculator-android? - Should the calculator-android included in [1] have included an "AndroidManifest.xml" file? - How can I fix the build errors? Is there something else needed in addition to including the Android Library? - Should I import 'tuscany-databinding-saxon'? Or, why should this not be imported? I also went through the licensing page Simon pointed you to. Please let me know if I can help. [1] https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/ [2] https://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules [3] http://code.google.com/android/intro/installing.html#developingwitheclipse On Tue, May 6, 2008 at 12:45 PM, Adriano Crestani < [EMAIL PROTECTED]> wrote: > Hi, > > I will try to summarize the modifications I've done on SCA to run on > Android > so far. > > As I aforementioned, most dynamic instantiations were being done on > host-embedded module. However, there was another modules which were also > using the dynamic instantiation and I had to modify too. For example, the > extensibility module, where I had to add the string lines directly on the > code as they couldn't be read from the file. > > OK, so far so good. > > But I have found another limitations. But before to explain it, let me > explain how android deals with the app resources: > > On the android app project, there is a folder called res, which can only > contain certain folders: xml, raw, strings, etc (I don´t remember the > other, > but they are predefined). And these folders can only contain files that are > named only with letters, digits and the '_' character. > > Yes, the resource structure is very limited, but there is a reason. Each > file is packed and compressed into a single file, then when the android app > is compiled it auto generates a class named R, which has static subclasses > named with the name of each folder contained on the res folder. Each > subclass has static int fields that points to the beginning of each file in > the compressed file. > > Example: res/raw/filename is converted to R.raw.filename > > So, as each int field has the name of each file, the file names should only > be composed of those characters described above. Then, no ".xml", > ".composite", ".xsd" is supported, as they all contains the '.' character > on > their names. > > Each folder name describes how the android converter will compress the > files > contained in it, for example, the files contained in the "xml" folder are > compressed to a special binary xml format and etc. The only folder that do > not have the files compressed is the "raw" folder. > > Every running app on Android is called context, which is an instance of a > class that extends the Context class. In the same package this class is > defined, the R class is also defined. > > To access the files that are pointed by the R class, the context instance > is > needed: contextInstance.getRescources().openRawResource(R.raw.filename) > > SCA works with resources practically only using the URI/URL. However, > there > is no way to access this resources using an URL object, because there is no > defined protocol to access this files. > > Trying to get the calculator sample running on Android, I placed the > calculator.composite file in the raw folder. I had also to remove the '.' > character from the file name, so I renamed it to "calculator_composite". > > So, to access the files pointed by the R class, I "implemented" a new > protocol, called "dex" (how the Android app file is called, equivalent to > Java jar files ). The dex protocol is defined as: > > dex://<context_package>/<resource_folder>/<file_name> > > <context_package> = package where the app context and R class are located > <resource_folder> = folder where the file is located > <file_name> = the file name > > Valid example1: dex://calculator.android/raw/calculator.composite > Valid example2: dex://calculator.android/raw/ > Valid example3: dex://calculator.android/ > > PS: the implemented protocol replaces the last '.' character when trying to > access the file...the '.' character is accepted, though the SCA Android > version would be compatible with the SCA Java version that searches for > files which ends with ".composite" and not with "_composite" > > I implemented some classes to support this protocol, they are located at > [1]: > > DexURLStreamHandlerFactory.java< > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/org/apache/tuscany/sca/android/DexURLStreamHandlerFactory.java > >: > the instance of this class is set as the app URLStreamHandlerFactory when > the SCADomain is loaded. This class creates the DEXURLStreamHandler and > allows the dex protocol to be a valid protocol. > > DexURLStreamHandler.java< > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/org/apache/tuscany/sca/android/DexURLStreamHandler.java > >: > Create a DEXURLConnection from a dex URL object. > > DexURLConnection.java< > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/org/apache/tuscany/sca/android/DexURLConnection.java > >: > Provides the access to a file described on the dex URL. > > DexResource.java< > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/org/apache/tuscany/sca/android/DexResource.java > >: > Provides some util methods for dex resources. For example, from a dex URL, > which describes a folder, it is possible to retrieve all the files in this > folder. > > ContextRegistry.java< > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/org/apache/tuscany/sca/android/ContextRegistry.java > >: > as a context reference is needed to access the resources, when invoking > SCADomain.newInstance(Context, String), the SCADomain register the Context > object in the ContextRegistry and unregister when the SCADomain.close() is > involked. This way, when URLConnection tries to access the file stream, it > uses the context object registered in the ContextRegistry. Each context is > registered in a map by its package name. > > With the dex protocol implemented, I could access the > "calculator.composite" > file in my app resource: SCADomain.newInstance(contextReference, > "dex://calculator.android/raw/calculator.composite") > > I was getting another exceptions when the SCA tries to access the STAX > classes. It was happening because the Android SDK do not include some > standard java classes. So, as the missing classes were not so complex > classes, I copied them from JDK source to [2]. This classes have CDDL > license, does anybody know if it is compatible with ASL license? > > ================================= > > Getting it "running" > > It is not really running(I will explain below), but I will describe how to > config the eclipse workspace to work with the code I have uploaded on [3]. > > 1- download the modified code from [3] and install them > > 2- download the SCA modules from [4]. I'm working with an old revision, the > 643746, I recommend to checkout this revision too, I haven´t tested the > modified code with earlier revisions. > > 3- on the folder you download the SCA modules, run: > > mvn clean install -Dtest=no > mvn -Peclipse eclipse:eclipse -Dtest=no > > 4- download the Android SDK and the eclipse plugin at [5] > > 5- open the eclipse and create a new workspace, do not forget to set the > M2_REPO variable on it. > > 6- import the projects included in the files you've download from [3] > > 7- import the SCA module projects (exclude the saxon module) > > 8- There should be a lot of errors some modules, include the Android > library > on them, it should fix the problem > > If everything goes fine (and if I have described everything correctly), > when > you run the calculator-android project as an "Android application" you > should get an exception, that was generated initially by a NPE thrown by > org.apache.tuscany.sca.binding.sca.impl.RuntimeSCAServiceBindingProvider > constructor. This is caused because the latest Android SDK does not support > the Reflection API yet. So, the SCA cannot check the @Reference annotations > (I commented the code which tries to read the annotations, so when the > execution reach this constructor it throws the NPE). However, the Android > developers say the next SDK release will support the Reflection api, they > do > not tell when it will be released, they just say it will be soon :S > > This is the summarize what I have done on running SCA on Android so far. > Suggestions/contributions will be appreciated : ) > > I expect I have explained everything correctly. Sorry for my bad english, > I'm almost sleeping on the keyboard :o > > Any questions/doubts about what I have written here, just let know ; ) > > Kind Regards, > Adriano Crestani > > [1] > > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/org/apache/tuscany/sca/android/ > [2] > > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/javax/xml/ > [3] https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/< > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/android-jdk-classes/src/javax/xml/ > > > [4] https://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules > [5] http://code.google.com/android/download_list.html > > On Thu, Mar 20, 2008 at 9:43 PM, Adriano Crestani < > [EMAIL PROTECTED]> wrote: > > > I have started to change the SCA code. > > > > Initially, the objects instantiated dynamically were not being > > instantiated, because info about which class to instantiate is extract > from > > some text files contained in SCA modules' jars. Unfortunately, when > Android > > converter converts the SCA modules' jars to .dex files, it ignores the > > non-class files, and they are not included. It happens because Android > has a > > very specific way to store the app resources, which is completely > different > > from Java. > > > > Though, as Luciano suggested, I started to modify these dynamic > > instantiation for static. It's working for now : ). All these > modifications > > were made only on host-embedded module code, which I have copied into [1] > > and renamed to host-android. > > > > Also, one of those static instantiated classes was trying to access the > > javax.naming.InitialContext in its constructor, but it's not supported by > > Android and I commented the code. As this class belonged to SCA core > module, > > I also copied this module into the mobile-android sandbox and renamed the > > module to core-android. > > > > So, all the modifications made so far are in the [2]. > > > > Now, as I was expecting, I got some ClassNotFoundExceptions on SCA code > > when it tries to use the Java XML API. It happens because Android > implements > > only a small part of this API. So, next step is try to adapt the SCA XML > > access into Android way to access XML. Does anybody know some other XML > API > > that is javax.xml independent I could use instead of Android one? > > > > Suggestions? : ) > > > > Adriano Crestani > > > > [1] > > > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/host-android/ > > [2] > > > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/ > < > https://svn.apache.org/repos/asf/incubator/tuscany/sandbox/mobile-android/host-android/ > > > > > > > > > > > > On Mon, Mar 17, 2008 at 1:41 PM, Luciano Resende <[EMAIL PROTECTED]> > > wrote: > > > > > I'd probably categorize the experiment we are doing now, as a learning > > > experience to familiarize with the Mobile environment available in > > > Google Android. For this, we have choosen to try running one of the > > > simplest samples we had (calculator) in the Android JVM > > > environment.... In the long run, the idea is to have a more > > > light-weight "sca mobile core/runtime" available, similar to what we > > > did for Web 2.0 (implementation-widget) and described by Mike below. > > > > > > But it's indeed good to discuss these items with the community, would > > > be also good to have the community contributing requirements/scenarios > > > for a Tuscany mobile story. And we are all open and welcoming any > > > help. > > > > > > > > > On Mon, Mar 17, 2008 at 8:22 AM, Mike Edwards > > > <[EMAIL PROTECTED]> wrote: > > > > Brandon Werner wrote: > > > > > Can you explain the benefit of moving SCA/SDO over to the Android > > > platform? > > > > > I can understand wanting to have the ability to consume simple XML > > > services > > > > > and perhaps consume disconnected datagraphs, but I don't > understand > > > why the > > > > > world wouldn't want a more light-weight way of doing that than > > > ripping out > > > > > something that was meant for the JEE / JSE. > > > > > > > > > > <snip> > > > > Brandon, > > > > > > > > So you think that a device using the Andriod platform is likely to > > > want > > > > to use services and a service-oriented approach to building > > > > applications. But you think that SCA is too "heavyweight"? Is that > > > > simply a question of the size of the code involved (I note that the > > > core > > > > of Tuscany is quite small) or is the SCA approach too "heavyweight" > > > in > > > > some other sense? > > > > > > > > I wonder if you've taken a look a the implementation.widget > > > exemplified > > > > in the Tutorial demo code? This applies SCA principles to AJAX > > > widgets > > > > running in the browser - simplifying the connectivity a great deal > > > (in > > > > my opinion) and yet adding little overhead. > > > > > > > > In the longer run, we may want to look to do something similar for > > > the > > > > Android platforms, perhaps with Java rather than the more limited > > > > JavaScript components. Starting with the current SCA package seems > > > > reasonable to me - once we have experience with how that works, we > > > will > > > > have a better idea what needs to be changed and tailored for the > > > Android > > > > platform. > > > > > > > > > > > > Yours, Mike. > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > -- > > > Luciano Resende > > > Apache Tuscany Committer > > > http://people.apache.org/~lresende<http://people.apache.org/%7Elresende> > <http://people.apache.org/%7Elresende> > > > http://lresende.blogspot.com/ > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > -- best, -oscar Oscar Castañeda