Hi Taras, Thanks for your help. I think your suggestions resolved the problem, even though I'm getting other errors now. By mistake I sent the email only to you which I think resulted in me being the only recipient of your response. I include your response and my follow-up below, as someone else might find this useful.
Unfortunately I cannot open the TUSCANY wiki at the moment but it looks like > the contents of retrotranslator-android-1.2.6.jar hasn't been included > into the dex file. Try to explicitly refer to it in your code, for instance, > call > net.sf.retrotranslator.android.main.java.lang._Class.cast(String.class, > "test"); > > And you needn't use the 1.4 target - only using the 1.5 one makes sense for > Android. > I forgot to mention that you can use the embed option making inclusion > of retrotranslator-android-1.2.6.jar into the compile path redundant. > > So you can add "-embed <a single dot or any package name>": > > java -jar > ../Retrotranslator-1.2.6-bin/retrotranslator-transformer-1.2.6.jar > -srcdir ../workspace -target 1.5 -reflection safe -stripannot -embed . > -classpath ../Retrotranslator-1.2.6-bin/retrotranslator-android-1.2.6.jar > -verbose > After following your suggestion and adding retrotranslator-android-1.2.6.jar as an external library (as opposed to an external _user_ library) the retrotranslator related errors disappeared. I'm now receiving errors about java.rmi.Remote [1], which from what I could find is not supported in Android. I just thought I'd mention it in case you have any suggestions :-) On Tue, Jun 17, 2008 at 8:16 PM, Oscar Castaneda < [EMAIL PROTECTED]> wrote: > Hi Taras, > > Thank you so much for the detailed response. > > I think you're right that when I run the Android project from Eclipse it > both compiles the sources into classes and the classes into a dex file. I > also agree that the most elegant way would be to add the translation step to > the ADT plugin source code, thus enabling users to run Retrotranslator on > the sources from within Eclipse. In some cases, such as mine, this is > preferred over manually translating libraries that contain annotations and > then adding them to the the main project (for instance, to simplify > debugging). > > There is a workaround to prevent classes that have already been translated > by Retrotranslator to be recompiled from source. The workaround is to > disable the Java Builders from within each project's properties. I tried > this and no longer receive the Annotation error: > > java.lang.Class.isAnnotationPresent(Class.java:1131) > > However, I'm getting the error shown below (and listed on the full stack > trace in [1]). I took care to include retrotranslator-android-1.2.6.jar as > an external library to all Tuscany projects, including calculator-android, > as you pointed out. Additionally, I confirmed through the timestamps on > class files and dex file that retrotranslated classes are not being > recompiled and that the dex file was generated a few minutes after running > retrotranslator. > > java.lang.NoClassDefFoundError: > net.sf.retrotranslator.android.main.java.lang._Class > > I've tried this running retrotranslator as shown below, setting the target > to java 1.5 at first and then to 1.4. > > $ java -jar > /../Retrotranslator-1.2.6-bin/retrotranslator-transformer-1.2.6.jar -srcdir > /../workspace -target 1.5 -reflection safe -stripannot -classpath > /../Retrotranslator-1.2.6-bin/retrotranslator-android-1.2.6.jar -verbose > > What could be going wrong? Any suggestions would be greatly appreciated. > > [1] http://cwiki.apache.org/confluence/display/TUSCANYWIKI/14Jun2008 > > > > On Wed, Jun 4, 2008 at 6:44 PM, Taras Puchko <[EMAIL PROTECTED]> > wrote: > >> Hi Oscar, >> >> Retrotranslator does it's job by modifying compiled classes in the >> following way: >> 1. Embedding into each class its metadata (including annotations) as one >> big character string. >> 2. Replacing some method invocations, so java.lang.Class.isAnnotationPresent >> is being replaced with >> net.sf.retrotranslator.android.main.java.lang.Class.isAnnotationPresent etc. >> >> So when you call getAnnotations() on a particular class the code from >> retrotranslator-android-1.2.6.jar will parse the corresponding metadata and >> return the result. >> >> AFAIK when you run your Android project from Eclipse it both compiles your >> sources into classes and the classes into a dex file. So Retrotranslator has >> no chance to modify classes in between unless you fix the ADT plugin. The >> workaround is not to put your sources into Eclipse and to process it with >> javac, Retrotranslator and jar manually. After that you may add the jar to >> Eclipse. >> >> If you execute the following line you should obtain mytuscany-android.jar >> that is one-third bigger then the original mytuscany.jar and does not >> contain references to Java 5 reflection methods. >> >> java -jar retrotranslator-transformer-1.2.6.jar -srcjar mytuscany.jar >> -destjar mytuscany-android.jar -target 1.5 -reflection safe -stripannot >> -classpath retrotranslator-android-1.2.6.jar >> >> So the line java.lang.Class.isAnnotationPresent(Class.java:1131) in the >> stack trace means that the application is based on non-translated binaries. >> Maybe you had successfully processed your classes but Eclipse overwrote them >> after that or Eclipse had already created the dex file before you executed >> Retrotranslator. >> >> If you're using Eclipse the most elegant way would be to add the >> translation step to the ADT plugin source code, but otherwise don't include >> Tuscany sources into the project, only include a jar processed by >> Retrotranslator and retrotranslator-android-1.2.6.jar. >> >> >> Cheers, >> Taras. >> >> >> On Wed, Jun 4, 2008 at 3:21 PM, <[EMAIL PROTECTED]> wrote: >> >>> Hi Taras, >>> >>> I'm trying to run Apache Tuscany on Android as part of my Google >>> Summer of Code project: Incubating and Android in Delft [1]. I've run >>> all the (modified) source code through retrotranslator but still get >>> "native method not implemented" errors that I believe are related to >>> the lack of annotations support on the current Android SDK. >>> >>> To test Apache Tuscany I'm running a modified calculator project >>> (setup as an Android project) called calculator-android. I have >>> imported the Apache Tuscany SCA modules and modified code for Android >>> into an eclipse workspace. Then I'm running retrotranslator from the >>> command line as shown below. I'm keeping the target code at java 1.5 >>> but get the annotation related errors when running the calculator- >>> android as an Android Application. The same thing happens when I try >>> to convert the code to java 1.4. >>> >>> $ java -jar /../retrotranslator-transformer-1.2.6.jar -target 1.5 - >>> stripannot -embed support -reflection safe -classpath /../ >>> retrotranslator-android-1.2.6.jar -srcdir /../workspace/ -verbose >>> >>> Any advice you may have will be greatly appreciated. There's more >>> details on what I'm currently doing in [2] in case you can help. >>> >>> Thanks in advance. >>> >>> [1] >>> http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Allow+Google+Android+applications+to+easily+consume+business+services >>> [2] http://cwiki.apache.org/confluence/display/TUSCANYWIKI/30may2008 >>> >>> best, >>> -oscar >>> >>> On Apr 3, 5:40 pm, Taras Puchko <[EMAIL PROTECTED]> wrote: >>> > I've made a mistake in my previous post, the correct command is the >>> > following: >>> > >>> > java -jarretrotranslator-transformer-1.2.6.jar -target 1.5 - >>> > stripannot -embed support -reflection safe -classpathretrotranslator- >>> > android-1.2.6.jar -srcjar gdata-media-1.0.jar >>> > >>> > To use annotations in your code extract classes that contain or >>> > manipulate annotations into a separate library, translate it >>> withRetrotranslatorand add it as a dependency to the main project. >>> > >>> > Regards, >>> > Taras. >>> > >>> > On 3 Кві, 09:42, Taras Puchko <[EMAIL PROTECTED]> wrote: >>> > >>> > > If your application does not declare or use annotations itself you >>> may >>> > > translate the dependency before adding it to the Eclipse project: >>> > >>> > > java -jarretrotranslator-transformer-1.2.6.jar -target 1.5 -embed >>> > > support -reflection safe -stripannot -srcjar gdata-media-1.0.jar >>> > >>> > > Regards, >>> > > Taras. >>> > >>> > > On 28 Бер, 17:18, nwmotogeek <[EMAIL PROTECTED]> wrote: >>> > >>> > > > That link describes how to add a target to the build.xml but I >>> don't know >>> > > > how to do that with Eclipse can some one point me to instructions >>> on this? >>> > >>> > > > Thanks, >>> > > > -Dave >>> >> >> >> >> >> > > > -- > best, > -oscar > > Oscar Castañeda -- best, -oscar Oscar Castañeda --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] Announcing the new M5 SDK! http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---