rules_android icon indicating copy to clipboard operation
rules_android copied to clipboard

mobile-install fails with dependencies from rules_jvm_external

Open fhilgers opened this issue 9 months ago • 7 comments

When trying to use mobile-install on the example/basicapp I am getting the following stacktrace after launching the application: stacktrace.txt

I am using rules_jvm_external with an overridden rules_android to the version from rules_android git repository.

This is a patch to apply to the example:

diff --git a/examples/basicapp/MODULE.bazel b/examples/basicapp/MODULE.bazel
index aac81cc..37a891e 100644
--- a/examples/basicapp/MODULE.bazel
+++ b/examples/basicapp/MODULE.bazel
@@ -4,6 +4,14 @@ module(
 
 bazel_dep(name = "rules_java", version = "7.4.0")
 bazel_dep(name = "bazel_skylib", version = "1.3.0")
+bazel_dep(name = "rules_jvm_external", version = "6.1")
+local_path_override(
+    module_name = "rules_jvm_external",
+    path = "../rules_jvm_external/"
+)
+
+remote_android_extensions = use_extension("@rules_android//bzlmod_extensions:android_extensions.bzl", "remote_android_tools_extensions")
+use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools")
 
 bazel_dep(
     name = "rules_android",
@@ -15,7 +23,21 @@ local_path_override(
     path = "../../",
 )
 
-register_toolchains(
-    "@rules_android//toolchains/android:android_default_toolchain",
-    "@rules_android//toolchains/android_sdk:android_sdk_tools",
+maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
+
+maven.install(
+    aar_import_bzl_label = "@rules_android//android:rules.bzl",
+    artifacts = [
+       "androidx.appcompat:appcompat:1.6.1",
+       "androidx.appcompat:appcompat-resources:1.6.1",
+    ],
+    fail_if_repin_required = True,
+    lock_file = "//:manifest_install.json",
+    repositories = [
+        "https://maven.google.com",
+        "https://repo1.maven.org/maven2",
+    ],
+    resolver = "maven",
+    use_starlark_android_rules = True,
 )
+use_repo(maven, "maven")
diff --git a/examples/basicapp/WORKSPACE.bzlmod b/examples/basicapp/WORKSPACE.bzlmod
index a69bd79..589a040 100644
--- a/examples/basicapp/WORKSPACE.bzlmod
+++ b/examples/basicapp/WORKSPACE.bzlmod
@@ -1,4 +1,10 @@
 load("@rules_android//rules:rules.bzl", "android_sdk_repository")
 android_sdk_repository(
     name = "androidsdk",
-)
\ No newline at end of file
+)
+
+new_local_repository(
+    name = "androidstudio",
+    path = "android-studio",
+    build_file = "//:androidstudio.BUILD",
+)
diff --git a/examples/basicapp/java/com/basicapp/BUILD b/examples/basicapp/java/com/basicapp/BUILD
index a8fb99d..80b401c 100644
--- a/examples/basicapp/java/com/basicapp/BUILD
+++ b/examples/basicapp/java/com/basicapp/BUILD
@@ -11,4 +11,7 @@ android_library(
     srcs = ["BasicActivity.java"],
     manifest = "AndroidManifest.xml",
     resource_files = glob(["res/**"]),
+    deps = [
+      "@maven//:androidx_appcompat_appcompat"
+    ]
 )
diff --git a/examples/basicapp/java/com/basicapp/BasicActivity.java b/examples/basicapp/java/com/basicapp/BasicActivity.java
index 03c9aef..98f4824 100644
--- a/examples/basicapp/java/com/basicapp/BasicActivity.java
+++ b/examples/basicapp/java/com/basicapp/BasicActivity.java
@@ -21,10 +21,12 @@ import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
 
+import androidx.appcompat.app.AppCompatActivity;
+
 /**
  * The main activity of the Basic Sample App.
  */
-public class BasicActivity extends Activity {
+public class BasicActivity extends AppCompatActivity {
 
   @Override
   protected void onCreate(Bundle savedInstanceState) {
diff --git a/mobile_install/tools.bzl b/mobile_install/tools.bzl
index 72dd5b6..c71fd58 100644
--- a/mobile_install/tools.bzl
+++ b/mobile_install/tools.bzl
@@ -37,7 +37,7 @@ TOOL_ATTRS = dict(
         ),
     ),
     _studio_deployer = attr.label(
-        default = "//tools/android:gen_fail", # TODO(#119): Studio deployer jar to be released
+        default = "@@androidstudio//:deployer_deploy.jar", # TODO(#119): Studio deployer jar to be released
         allow_single_file = True,
         cfg = "exec",
         executable = True,

Edit: I forgot to mention that building and manually installing the apk works fine.

fhilgers avatar May 18 '24 17:05 fhilgers