Java Question Wrapper compiled with Java 8

corwin42

Expert
Licensed User
Longtime User
I want to wrap a library that uses some Java8 features and so my Wrapper library also needs to compile with Java8.

When I try to compile my B4A test project I get this error:

B4A version: 6.80 BETA #2
Parsing code. (0.00s)
Compiling code. (0.27s)
Compiling layouts code. (0.00s)
Organizing libraries. (0.00s)
Generating R file. (0.72s)
Compiling generated Java code. (2.40s)
Convert byte code - optimized dex. Error
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.processClass(Main.java:598)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:570)
at com.android.dx.command.dexer.Main.access$2(Main.java:546)
at com.android.dx.command.dexer.Main$2.processFileBytes(Main.java:514)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:537)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:449)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:236)
at com.android.dx.command.dexer.Main.run(Main.java:206)
at com.android.dx.command.dexer.Main.main(Main.java:179)
at com.android.dx.command.Main.main(Main.java:103)
...while parsing de/amberhome/materialdialogs/FileChooserDialogBuilderWrapper.class
1 error; aborting

Any ideas how I can work around it?

If I understand it right, the library uses Type intersections. I have to cast the activity this "strange" way:

B4X:
mBuilder = new FileChooserDialog.Builder((AppCompatActivity & FileCallback) ba.activity);

Maybe there is a workaround for this in Java7?
 

corwin42

Expert
Licensed User
Longtime User
I compile the Wrapper with AndroidStudio
If I try to set target version to 1.7 I get this error:

javacTask: source release 1.8 requires target release 1.8

When I set source release to 1.7 I cannot compile the code.
 

corwin42

Expert
Licensed User
Longtime User
Ok, found the solution. Was quite easy.

The solution was not to cast to AppCompatActivity but to an Activity that extends AppCompatActivity and implements FileCallback Interface. That can be compiled with Java7.

@DonManfred: If you read this. This is the FileChooserDialog from afollestad Materials Dialog:

Screenshot_20170223-171833.png
 
Top