1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00
JUCE/modules/juce_core/native/java
2025-09-17 12:50:06 +01:00
..
app/com/rmsl/juce Android: Add new ActivityLifecycleCallbacks base class 2025-07-29 15:04:15 +01:00
README.txt juce_core: Update instructions for generating Java bytecode with new tools 2025-09-17 12:50:06 +01:00

The Java code in the module's native/java subfolders have been used to generate
dex byte-code in various places in the JUCE framework. These are the steps
required to re-generate the dex byte-code from any Java source code inside the
native/java subfolders:

1. Create a new JUCE android project with the minimal sdk version which is
required for the Java source code you wish to compile.

2. If you are creating byte-code for new .java files, move the new files into
the native/javacore/app folder of the module, or create one if it doesn't
exist. Remember that .java files need to be in nested sub-folders which
resemble their package, i.e. a Java class com.rmsl.juce.HelloWorld.java should
be in the module's native/javacore/app/com/rmsl/juce folder.  If you wish to
modify existing .java files in the JUCE modules then just rename native/java to
native/javacore.

3. Build your project with Android Studio and run. The app will now use the
source code in the folder created in step 2 so you can debug your Java code
this way.

4. Once everything is working rebuild your app in release mode.

5. Go to your app's Builds/Android folder. Inside there you will find
build/intermediates/javac/release_Release/compileRelease_ReleaseJavaWithJavac/classes.
Inside of that folder, you will find all your Java byte-code compiled classes.
Remove any classes that you are not interested in (typically you'll find
Java.class and JuceApp.class which you will probably want to remove).

6. Inside of
build/intermediates/javac/release_Release/compileRelease_ReleaseJavaWithJavac/classes
execute the following d8 command:

    <path-to-your-android-sdk>/build-tools/<latest-build-tool-version>/d8 --release --lib <path-to-your-android-sdk>/sdk/platforms/<latest-platform-version>/android.jar --min-api <min-api> .

    (Replace <your-min-sdk-of-your-classes> with the minimal sdk version you used in step 1.)

7. gzip the output:

    gzip ./classes.dex

8. The output ./classes.dex.gz is now the byte code that can be
included into JUCE. You can use the Projucer's BinaryData generator
functionality to get this into a convenient char array like form.
On macOS/Linux you could also use the following command:

    xxd --include ./classes.dex.gz