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
-~----------~----~----~----~------~----~------~--~---

Reply via email to