Frequently asked questions

General

What does JRebel for Android do?

JRebel for Android allows you to see updates without having to install a new APK each time to apply your changes. Instead, delta packages are sent over to the device and the application is updated. Here is a blog post explaining the internals of JRebel for Android.

How can I get JRebel for Android?

JRebel for Android is available from Android Studio > Preferences > Plugins > Browse Repositories when you search for JRebel for Android. You can also refer to the Quick Start guide on how to get started.

Which projects does JRebel for Android support?

JRebel for Android works with all Android projects that are built with Gradle in Android Studio.

What do I need to change in my application in order to use JRebel for Android?

JRebel for Android does not require any changes to your project files. Our Android Studio plugin will take care of everything that is needed to start your application with JRebel for Android.

How does JRebel for Android change my development flow?

JRebel for Android doesn’t really change your development flow. Instead of using Run, you should use Apply changes when you want to see your code running in the application. If the application was not installed with JRebel for Android previously, it will be done so once clicking Apply changes.

Can I use the debugger with JRebel for Android?

Yes. Use Debug with JRebel for Android to start a new debugger session. Attaching the debugger to Android processes is also supported if you want to debug an already running application. You can also use the Apply changes button while the debugger is attached. New code will also be hit in the debugger session.

Do I need an internet connection to use JRebel for Android?

JRebel for Android does not require internet connection to be used. However, you will need internet access to install the plugin from the JetBrains repository, activate it, as well as for getting updates.

Can I use JRebel for Android via a command line interface?

No. JRebel for Android is tightly integrated into Android Studio and does not work with invoking the Gradle build commands from a command line.

What is the experimental flag in JRebel for Android?

Experimental flag enables features that are not fully finalized or stable yet. If you do want to experience the bleeding edge with JRebel for Android, add this flag to your to your studio.vmoptions file and restart Android Studio:
-Djrebel.android.experimental=true
You can verify that the experimental flag has been enabled by checking JRebel for Android console output for:
Experimental flag has been enabled!

I have an annotation processor based library that is not mentioned on the features page. What should I do?

When an unsupported annotation processor is detected, JRebel for Android will disable the incremental Java compilation. If you are an Enterprise customer, you can reach out to us and request custom integration at android@zeroturnaround.com.

Licensing

I owned a valid Individual or Business license before JRebel for Android Enterprise was released. What should I do?

Upgrade to the latest version of JRebel for Android IDE plugin. This will automatically enable all Enterprise features for existing Individual and Business license owners.

What kind of features can I use during the 14-day trial?

All product features are available throughout the trial period.

How can I measure the impact of the incremental Java compiler?

Disable JRebel for Android’s incremental Java compiler to find out. Create the file jrebel.properties in your project root. Add the following content to the file: incrementalJavac=false

How can I disable metrics being reported from JRebel for Android?

Open Android Studio/IntelliJ > Help > Edit Custom VM Options. Add -Djrebel.android.metrics=false and restart your IDE for the changes to take effect.

Compatibility

Does JRebel for Android work with all devices and emulators?

Yes, provided the device has Android 4.0.3 (API 15) or newer. JRebel for Android uses ADB. This means that any handheld device or emulator that works for normal development works with JRebel for Android. Android Auto, Android TV and Android Wearable lines are not supported at the moment (but they still might work!).

Which build systems does JRebel for Android support?

JRebel for Android supports the Gradle build system.

Which JVM languages does JRebel for Android support?

JRebel for Android works at the bytecode level. This means that all languages that produce bytecode compatible with ART, Dalvik, and are integrated to Gradle are supported. For example – Kotlin, Scala, Groovy, Java.

Does JRebel for Android support ART?

Yes. JRebel for Android works with both Dalvik and ART.

Does JRebel for Android support multidex?

Yes.

Does JRebel for Android support native code (JNI linking)?

Yes. JRebel for Android can run applications that contain native code. However if you update native code you need to run the application again using the “Run with JRebel for Android” button.

Does JRebel for Android support multi-process applications?

No. JRebel for Android does not support applications with multi-process. The application will be installed, but undefined behavior is to be expected.

I updated Android Studio and the JRebel for Android plugin is missing, what should I do?

If you did not select to import your previous Android Studio version settings, your existing plugins will not be available in the new version. If you did opt to import the settings and JRebel for Android still does not show up, navigate to Preferences > Plugins > Browse repositories and search for ”JRebel for Android”. If the plugin is installed and missing, you should see a button labelled “Restart Android Studio” or “Install”.

Does JRebel for Android support all libraries that feature annotation processors for incremental Java compilation?

Can I use JRebel for Android Free with libraries having annotation processors?

Yes you can. However, your Java compilation task in the build process will take more time as it will be non-incremental. Depending on the project size and architecture, the execution of a compilation task can take anything from a few seconds to nearly a minute.

Build tools

What Gradle version should I use?

It’s recommended to use the latest available Gradle version in your project. Each Gradle version brings improvements to performance which also benefits JRebel for Android! JRebel for Android supports all versions starting from Gradle 2.2.1.

Does JRebel for Android support Kotlin?

Yes. JRebel for Android works with Kotlin and any other JVM compatible language that is integrated into Gradle. However, using Kotlin will likely have performance impacts due to using the Kotlin compiler. Wherever possible, use Kotlin 1.0.2 or newer and specify this in the gradle.properties file:
kotlin.incremental = true

What versions of Android Gradle plugin are supported?

JRebel for Android works with Android Gradle plugin 1.0 and newer.

Applying changes

How do I apply changes?

JRebel for Android comes bundled as an Android Studio plugin. This plugin adds 3 buttons to the main toolbar:
  • Run with JRebel for Android – always builds a new APK and installs the application to the selected device.
  • Debug with JRebel for Android – installs an APK to the device and attaches the debugger.
  • Apply change with JRebel for Android – installs an APK to the device if it’s missing and updates the already running application.

Is there a shortcut to apply changes?

Yes. Use Command+F10 to apply changes (Ctrl+F10 on Windows).

What if I want to update the app icon or the application name?

For now, you need to use Run with JRebel for Android button. This will create a new APK and include the desired changes.

Why does the screen flicker when I apply changes?

To update the application, JRebel for Android always calls Activity.recreate to the topmost activity. This follows the same callbacks you would have with a configuration change — for example rotating from portrait to landscape.

Why does the application sometimes restart after applying changes?

If a class hierarchy change needs to be applied, JRebel for Android must perform an incremental install. In this case, the application will be restarted. For a list of complete changeset behaviors, check here.

My application crashes every time I press Apply changes?

Make sure your activity is properly handling onSaveInstanceState. If you can’t detect a bug there, please report it to us using Android Studio > Tools > JRebel for Android > Submit a support ticket.

I'm seeing Could not connect to the agent: Android Debug Bridge (ADB) is unresponsive. Please try reconnecting the device?

This error is shown when ADB connection is lost or becomes unstable. If you are using a physical device, make sure your USB connection is solid. Restarting ADB using command line is an option to try as well: adb kill-server followed by adb start-server.

Launching application on a device

I see the notification 'We don’t have the last changes' when launching my app. What happened?

We were unable to finish transferring all data from your previous “Apply changes”. This means that the application was started from a previous state. Press “Run with JRebel for Android” in your IDE to get the up-to-date application.

I see 'Companion application missing. Use Run with JRebel for Android from the IDE to continue.' when trying to start my application from the launcher. What should I do?

JRebel for Android uses a secondary application to handle the communication of changes between the IDE and the device. If the companion application is uninstalled, the application is unable to start. Using “Run with JRebel for Android” will reinstall both applications, allowing normal usage.

I see 'Application installation incomplete. Use Run with JRebel for Android from the IDE to continue.' when trying to start my application from launcher. What should I do?

The device was disconnected during the installation process and the application cannot be started. Follow the instructions on the screen and use the “Run with JRebel for Android” button in the IDE to reinstall the app.