An analysis of the Rabbit R1 APK
May 2, 2024
You might've seen the news that the Rabbit R1, a handheld AI device, is actually "just an Android app". The Rabbit CEO has since put out a statement claiming that the "rabbit r1 is not an Android app" and that "rabbit OS and LAM run on the cloud with a very bespoke AOSP and lower level firmware modifications".
Emerge obtained what is allegedly the Rabbit R1 APK and will explain what the APK is + dive into its content.
The Rabbit APK
The APK we have is a launcher app. Almost all Android phones come with a default launcher, like the Pixel launcher (made by Google) or the Samsung Launcher (by Samsung). The launcher app runs the main screen with your apps, settings, etc. This is highly customizable and can even be swapped with a 3rd party launcher like Nova.
This is incredibly common. The majority of non-Apple touchscreen devices run AOSP. To use a device running AOSP, you'd need a launcher app or a significant amount of effort. The launcher app would be Rabbit's main touch interaction point with their "LAM" (large action model) and settings.
So, Rabbit seems to use Android. That on its own says nothing about its quality and we can't speak to if Rabbit should "just be an app". But, we can dive into the launcher APK we have 🔬.
Analysis of APK
Download Size: 55.6 MB|Uncompressed Size: 111.4 MB
APK Structure
Let's start by looking at the APK's dependencies. We've put the full list of native dependencies that we found here, but want to call out some notable ones:
- Jetpack Compose
- Flutter
- Sentry
- MediaSoup - WebRTC service that suggests the potential for video chatting or streaming video/images to servers for multi-modality.
- Lottie (LOTS of Lottie)
Flutter
While most of the conversation has been about Rabbit using Android, we see a significant amount of Flutter code. On top of the native dependencies above, there are also Flutter dependencies, like Sentry (again), RxDart, and riverpod.
In the Flutter Packages, we also found r1_flutter
, which looks to be a list of all their class names, like:
flightClasses
FlightClassInfo
FlightConfirmCard
flightConfirmCardBuilder
FlightConfirmCardFL
FlightConfirmInfo
FlightInfo
...
FoodDeliveryDataProvider
FoodDeliveryEvent
FoodDeliveryEvent.back()
FoodDeliveryEvent.checkout()
...
The Flutter code appears to be how many of the features are implemented.
Lottie
Close to 40% of the total APK size is from different animations. 25% of the APK total size comes from these three animations: animation_init_step_guide_a
, animation_init_step_guide_b
, and animation_init_step_guide_c
. Each animation is 5.2 MB and can be optimized to a more efficient format.
Here are two more of our favorite animations we found:
rabbit_r1_lost_mode.gif
mini_rabbit_idle_listening.gif
Event Handlers
Duplicated bundles in Acorns extensions
Similar to what we found in the Flutter packages, we found several event_handlers in the dex that match up to existing features. Some notable handlers (full list here):
UberEventHandler
SpotifyEventHandler
FoodDeliveryEventHandler
MidjourneyEventHandler
TranslatorEventHandler
SearchWeatherInfo
SearchStockInfo
Given the size of these handlers, they are likely sending the event to a backend to be processed, which is where the "LAM" could live. The fact that there is no AI/ML in the APK, doesn't necessarily mean that Rabbit doesn't have an "LAM".
An interesting note is that there does appear to be overlap in the Kotlin handlers and Flutter code 🤷.
Wrapping up
After diving into the APK, here's what stood out:
- Rabbit seems to run Android, not really a surprise.
- We didn't find a "LAM" in the APK, but that doesn't mean it isn't happening in the backend. It also doesn't mean it is happening in the backend.
- The features seemed to be implemented in both Kotlin and Flutter, with possible duplication in functionality.
- We saw a large number of translations already done. Rabbit seems ready to support most languages, although we haven't seen plans of a public rollout to other languages yet.