An analysis of the Rabbit R1 APK

https://www.emergetools.com/deep-dives/rabbit-r1

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

Analysis page

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:

"lost" rabbit icon

rabbit_r1_lost_mode.gif

Rabbit icon with its ears moving

mini_rabbit_idle_listening.gif

Event Handlers

Duplicated bundles in Acorns extensions

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.
{
"by": "jshchnz",
"descendants": 111,
"id": 40242297,
"kids": [
40243918,
40243034,
40242840,
40242925,
40242909,
40242770,
40242928,
40243324,
40243907,
40243739,
40243815,
40242727,
40243400,
40244064,
40242779,
40243733,
40243003
],
"score": 113,
"time": 1714690732,
"title": "An analysis of the Rabbit R1 APK",
"type": "story",
"url": "https://www.emergetools.com/deep-dives/rabbit-r1"
}
{
"author": null,
"date": null,
"description": "Emerge Tools analysis of the Rabbit R1 APK.",
"image": "https://emergeassets.s3.us-west-1.amazonaws.com/rabbit-cover.png",
"logo": "https://logo.clearbit.com/emergetools.com",
"publisher": "Emerge Tools",
"title": "Emerge Tools | Rabbit R1 Deep Dive",
"url": "https://www.emerge-next-es7mfr5ih-emerge.vercel.app/deep-dives/rabbit-r1"
}
{
"url": "https://www.emergetools.com/deep-dives/rabbit-r1",
"title": "Emerge Tools | Rabbit R1 Deep Dive",
"description": "May 2, 2024You 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...",
"links": [
"https://www.emerge-next-es7mfr5ih-emerge.vercel.app/deep-dives/rabbit-r1",
"https://www.emergetools.com/deep-dives/rabbit-r1"
],
"image": "https://emergeassets.s3.us-west-1.amazonaws.com/rabbit-cover.png",
"content": "<div><p><i>May 2, 2024</i></p><p>You might've seen the news that the <a href=\"https://www.rabbit.tech/rabbit-r1\" target=\"_blank\">Rabbit R1</a>, a handheld AI device, is actually <a href=\"https://www.androidauthority.com/rabbit-r1-is-an-android-app-3438805/\" target=\"_blank\">\"just an Android app\"</a>. 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 <a href=\"https://source.android.com/\" target=\"_blank\">AOSP</a> and lower level firmware modifications\".</p><p>Emerge obtained what is allegedly the Rabbit R1 APK and will explain what the APK is + dive into its content.</p><h2>The Rabbit APK</h2><p>The APK we have is a <a href=\"https://medium.com/paradox-cat-tech-hub/custom-android-launcher-why-and-how-do-i-build-one-6a1b3af89d43\" target=\"_blank\">launcher app</a>. 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 <a href=\"https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher&amp;hl=en_US&amp;gl=US\" target=\"_blank\">Nova</a>.</p><p>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\" (<a href=\"https://www.rabbit.tech/research\" target=\"_blank\">large action model</a>) and settings.</p><p>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 🔬.</p><h2>Analysis of APK </h2><p><a href=\"https://www.emergetools.com/app/example/android/rabbit-r1\" target=\"_blank\">Analysis page</a></p><p><span><b>Download Size:</b> 55.6 MB</span><span>|</span><span><b>Uncompressed Size: </b> 111.4 MB</span></p><h3>APK Structure</h3><p> Let's start by looking at the APK's dependencies. We've put the full list of native dependencies that we found <a href=\"https://gist.github.com/mtopo27/43f08295524bbf1a8cdb7f7d7a0e29ff\" target=\"_blank\">here</a>, but want to call out some notable ones: </p><ul><li>Jetpack Compose</li><li>Flutter</li><li><a href=\"https://sentry.io/welcome/\" target=\"_blank\">Sentry</a></li><li><a href=\"https://mediasoup.org/\" target=\"_blank\">MediaSoup</a> - WebRTC service that suggests the potential for video chatting or streaming video/images to servers for multi-modality.</li><li>Lottie (LOTS of Lottie)</li></ul><h4>Flutter</h4><p>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), <a href=\"https://pub.dev/packages/rxdart\" target=\"_blank\">RxDart</a>, and <a href=\"https://pub.dev/packages/riverpod\" target=\"_blank\">riverpod</a>.</p><p>In the Flutter Packages, we also found <code>r1_flutter</code>, which looks to be a list of all their class names, like:</p><div><pre><code><span>flightClasses\n</span>FlightClassInfo\nFlightConfirmCard\nflightConfirmCardBuilder\nFlightConfirmCardFL\nFlightConfirmInfo\nFlightInfo\n...\nFoodDeliveryDataProvider\nFoodDeliveryEvent\nFoodDeliveryEvent.back()\nFoodDeliveryEvent.checkout()\n...\n</code></pre></div><p>The Flutter code appears to be how many of the features are implemented.</p><h4>Lottie</h4><p>Close to 40% of the total APK size is from different animations. 25% of the APK total size comes from these three animations: <code>animation_init_step_guide_a</code>, <code>animation_init_step_guide_b</code>, and <code>animation_init_step_guide_c</code>. Each animation is 5.2 MB and can be optimized to a more efficient format.</p><p>Here are two more of our favorite animations we found:</p><div><div><p><img src=\"https://www.emergetools.com/images/deepDives/rabbit/rabbit_r1_lost_mode.gif\" alt=\"&quot;lost&quot; rabbit icon\" /></p></div><p>rabbit_r1_lost_mode.gif</p></div><div><div><p><img src=\"https://www.emergetools.com/images/deepDives/rabbit/mini_rabbit_idle_listening.gif\" alt=\"Rabbit icon with its ears moving\" /></p></div><p>mini_rabbit_idle_listening.gif</p></div><h3>Event Handlers</h3><div><div><p><img src=\"https://www.emergetools.com/images/deepDives/rabbit/rabbit-event-handlers.png\" alt=\"Duplicated bundles in Acorns extensions\" /></p></div><p>Duplicated bundles in Acorns extensions</p></div><p>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 <a href=\"https://www.emergetools.com/app/example/android/rabbit-r1?search=event_handler\" target=\"_blank\">here</a>):</p><ul><li><code>UberEventHandler</code></li><li><code>SpotifyEventHandler</code></li><li><code>FoodDeliveryEventHandler</code></li><li><code>MidjourneyEventHandler</code></li><li><code>TranslatorEventHandler</code></li><li><code>SearchWeatherInfo</code></li><li><code>SearchStockInfo</code></li></ul><p>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\".</p><p>An interesting note is that there does appear to be overlap in the Kotlin handlers and Flutter code 🤷.</p><h2>Wrapping up</h2><p>After diving into the APK, here's what stood out:</p><ul><li>Rabbit seems to run Android, not really a surprise.</li><li>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.</li><li>The features seemed to be implemented in both Kotlin and Flutter, with possible duplication in functionality.</li><li>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.</li></ul></div>",
"author": "",
"favicon": "",
"source": "emergetools.com",
"published": "",
"ttr": 119,
"type": "website"
}