Android12系统源码升级Kotlin和Dagger2版本

355 阅读18分钟

由于公司项目采用Android Studio开发,在系统源码中进行编译的开发方式。

由于开发时kotlin版本太高,导致在系统中编译,报函数找不到的错误,所以只能升级系统kotlin的版本,同时由于app中使用了dagger2,顾顺便也将dagger2进行了升级。

注意:最佳的方式,是使用脚本,系统在编译镜像时,调用gradle编译apk,然后再将apk打包进系统镜像中,,但是公司目前没人愿意去搞这个方案,-_-|/ ....

升级kotlin版本到1.9.22

升级dagger2版本到2.46.1

一、升级kotlin版本

  • external/kotlic

1.4.30-release-302升级到1.9.22-release-704

git clone https://android.googlesource.com/platform/external/kotlinc -b android-14.0.0_r74
  • external/kotlinx.atomicfu

0.14.3升级到0.18.5

git clone https://android.googlesource.com/platform/external/kotlinx.atomicfu -b android-14.0.0_r74
  • external/kotlinx.coroutines

1.4.1升级到1.7.2

git clone https://android.googlesource.com/platform/external/kotlinx.coroutines -b android-14.0.0_r74
  • external/kotlinx.metadata

0.1.0升级到0.6.0

git clone https://android.googlesource.com/platform/external/kotlinx.metadata -b android-14.0.0_r74

二、升级dagger2版本

  • external/dagger2

2.28.1升级到2.46.1

git clone https://android.googlesource.com/platform/external/dagger2 -b android-14.0.0_r74

然后修改dagger2/java/dagger/internal/codegen/javac/JavacPluginModule.java文件

image.png

三、解决编译错误

  • external/auto

修改auto代码,patch内容如下

From 43cae3b31fbbdd6d381d7345e915d6d97cfcc882 Mon Sep 17 00:00:00 2001
From: pujh <pujh@idste.cn>
Date: Wed, 20 Nov 2024 17:47:35 +0800
Subject: [PATCH] update kotlin to 1.9.22, dagger2 to 2.46.1

---
 .../google/auto/common/AnnotationMirrors.java |  11 +
 .../google/auto/common/AnnotationOutput.java  | 265 ++++++++++++++++++
 .../com/google/auto/common/MoreElements.java  |  71 ++++-
 3 files changed, 337 insertions(+), 10 deletions(-)
 mode change 100644 => 100755 auto/common/src/main/java/com/google/auto/common/AnnotationMirrors.java
 create mode 100755 auto/common/src/main/java/com/google/auto/common/AnnotationOutput.java
 mode change 100644 => 100755 auto/common/src/main/java/com/google/auto/common/MoreElements.java

diff --git a/auto/common/src/main/java/com/google/auto/common/AnnotationMirrors.java b/auto/common/src/main/java/com/google/auto/common/AnnotationMirrors.java
old mode 100644
new mode 100755
index 62e5834e0f..f6def1cb0b
--- a/auto/common/src/main/java/com/google/auto/common/AnnotationMirrors.java
+++ b/auto/common/src/main/java/com/google/auto/common/AnnotationMirrors.java
@@ -152,5 +152,16 @@ public final class AnnotationMirrors {
         .toSet();
   }
 
+  /**
+   * Returns a string representation of the given annotation mirror, suitable for inclusion in a
+   * Java source file to reproduce the annotation in source form.
+   *
+   * <p>Fully qualified names are used for types in annotations, class literals, and enum constants,
+   * ensuring that the source form will compile without requiring additional imports.
+   */
+  public static String toString(AnnotationMirror annotationMirror) {
+    return AnnotationOutput.toString(annotationMirror);
+  }
+
   private AnnotationMirrors() {}
 }
diff --git a/auto/common/src/main/java/com/google/auto/common/AnnotationOutput.java b/auto/common/src/main/java/com/google/auto/common/AnnotationOutput.java
new file mode 100755
index 0000000000..c57d4c7cdf
--- /dev/null
+++ b/auto/common/src/main/java/com/google/auto/common/AnnotationOutput.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright 2014 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.auto.common;
+
+import static com.google.auto.common.MoreTypes.asTypeElement;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.AnnotationValueVisitor;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.SimpleAnnotationValueVisitor8;
+
+/**
+ * Handling of default values for annotation members.
+ *
+ * @author emcmanus@google.com (Éamonn McManus)
+ */
+final class AnnotationOutput {
+  private AnnotationOutput() {} // There are no instances of this class.
+
+  /**
+   * Visitor that produces a string representation of an annotation value, suitable for inclusion in
+   * a Java source file as an annotation member or as the initializer of a variable of the
+   * appropriate type. The syntax for the two is the same except for annotation members that are
+   * themselves annotations. Within an annotation, an annotation member can be written as
+   * {@code @NestedAnnotation(...)}, while in an initializer it must be written as an object, for
+   * example the construction of an {@code @AutoAnnotation} class. That's why we have this abstract
+   * class and two concrete subclasses.
+   */
+  private static class SourceFormVisitor
+      extends SimpleAnnotationValueVisitor8<Void, StringBuilder> {
+
+    private String formatType(TypeMirror typeMirror) {
+      return asTypeElement(typeMirror).getQualifiedName().toString();
+    }
+
+    @Override
+    protected Void defaultAction(Object value, StringBuilder sb) {
+      sb.append(value);
+      return null;
+    }
+
+    @Override
+    public Void visitArray(List<? extends AnnotationValue> values, StringBuilder sb) {
+      sb.append('{');
+      String sep = "";
+      for (AnnotationValue value : values) {
+        sb.append(sep);
+        visit(value, sb);
+        sep = ", ";
+      }
+      sb.append('}');
+      return null;
+    }
+
+    @Override
+    public Void visitByte(byte b, StringBuilder sb) {
+      sb.append("(byte) ").append(b);
+      return null;
+    }
+
+    @Override
+    public Void visitShort(short s, StringBuilder sb) {
+      sb.append("(short) ").append(s);
+      return null;
+    }
+
+    @Override
+    public Void visitChar(char c, StringBuilder sb) {
+      appendQuoted(sb, c);
+      return null;
+    }
+
+    @Override
+    public Void visitLong(long i, StringBuilder sb) {
+      sb.append(i).append('L');
+      return null;
+    }
+
+    @Override
+    public Void visitDouble(double d, StringBuilder sb) {
+      if (Double.isNaN(d)) {
+        sb.append("Double.NaN");
+      } else if (d == Double.POSITIVE_INFINITY) {
+        sb.append("Double.POSITIVE_INFINITY");
+      } else if (d == Double.NEGATIVE_INFINITY) {
+        sb.append("Double.NEGATIVE_INFINITY");
+      } else {
+        sb.append(d);
+      }
+      return null;
+    }
+
+    @Override
+    public Void visitFloat(float f, StringBuilder sb) {
+      if (Float.isNaN(f)) {
+        sb.append("Float.NaN");
+      } else if (f == Float.POSITIVE_INFINITY) {
+        sb.append("Float.POSITIVE_INFINITY");
+      } else if (f == Float.NEGATIVE_INFINITY) {
+        sb.append("Float.NEGATIVE_INFINITY");
+      } else {
+        sb.append(f).append('F');
+      }
+      return null;
+    }
+
+    @Override
+    public Void visitEnumConstant(VariableElement c, StringBuilder sb) {
+      sb.append(formatType(c.asType())).append('.').append(c.getSimpleName());
+      return null;
+    }
+
+    @Override
+    public Void visitString(String s, StringBuilder sb) {
+      appendQuoted(sb, s);
+      return null;
+    }
+
+    @Override
+    public Void visitType(TypeMirror classConstant, StringBuilder sb) {
+      sb.append(formatType(classConstant)).append(".class");
+      return null;
+    }
+
+    @Override
+    public Void visitAnnotation(AnnotationMirror a, StringBuilder sb) {
+      sb.append('@').append(formatType(a.getAnnotationType()));
+      ImmutableMap<ExecutableElement, AnnotationValue> map =
+          ImmutableMap.copyOf(a.getElementValues());
+      if (!map.isEmpty()) {
+        sb.append('(');
+        Optional<AnnotationValue> shortForm = shortForm(map);
+        if (shortForm.isPresent()) {
+          this.visit(maybeShorten(shortForm.get()), sb);
+        } else {
+          String sep = "";
+          for (Map.Entry<ExecutableElement, AnnotationValue> entry : map.entrySet()) {
+            sb.append(sep).append(entry.getKey().getSimpleName()).append(" = ");
+            sep = ", ";
+            this.visit(maybeShorten(entry.getValue()), sb);
+          }
+        }
+        sb.append(')');
+      }
+      return null;
+    }
+  }
+
+  private static AnnotationValue maybeShorten(AnnotationValue value) {
+    return ARRAY_VISITOR.visit(value, value);
+  }
+
+  private static final AnnotationValueVisitor<AnnotationValue, AnnotationValue> ARRAY_VISITOR =
+      new SimpleAnnotationValueVisitor8<AnnotationValue, AnnotationValue>() {
+        @Override
+        public AnnotationValue visitArray(
+            List<? extends AnnotationValue> values, AnnotationValue input) {
+          if (values.size() == 1) {
+            // We can shorten @Foo(a = {23}) to @Foo(a = 23). For the specific case where `a` is
+            // actually `value`, we'll already have shortened that in visitAnnotation, so
+            // effectively we go from @Foo(value = {23}) to @Foo({23}) to @Foo(23).
+            return Iterables.getOnlyElement(values);
+          }
+          return input;
+        }
+
+        @Override
+        protected AnnotationValue defaultAction(Object o, AnnotationValue input) {
+          return input;
+        }
+      };
+
+  // We can shorten @Annot(value = 23) to @Annot(23).
+  private static Optional<AnnotationValue> shortForm(
+      Map<ExecutableElement, AnnotationValue> values) {
+    if (values.size() == 1
+        && Iterables.getOnlyElement(values.keySet()).getSimpleName().contentEquals("value")) {
+      return Optional.of(Iterables.getOnlyElement(values.values()));
+    }
+    return Optional.empty();
+  }
+
+  /**
+   * Returns a string representation of the given annotation value, suitable for inclusion in a Java
+   * source file as the initializer of a variable of the appropriate type.
+   */
+  static String toString(AnnotationValue annotationValue) {
+    StringBuilder sb = new StringBuilder();
+    new SourceFormVisitor().visit(annotationValue, sb);
+    return sb.toString();
+  }
+
+  /**
+   * Returns a string representation of the given annotation mirror, suitable for inclusion in a
+   * Java source file to reproduce the annotation in source form.
+   */
+  static String toString(AnnotationMirror annotationMirror) {
+    StringBuilder sb = new StringBuilder();
+    new SourceFormVisitor().visitAnnotation(annotationMirror, sb);
+    return sb.toString();
+  }
+
+  private static StringBuilder appendQuoted(StringBuilder sb, String s) {
+    sb.append('"');
+    for (int i = 0; i < s.length(); i++) {
+      appendEscaped(sb, s.charAt(i));
+    }
+    return sb.append('"');
+  }
+
+  private static StringBuilder appendQuoted(StringBuilder sb, char c) {
+    sb.append('\'');
+    appendEscaped(sb, c);
+    return sb.append('\'');
+  }
+
+  private static void appendEscaped(StringBuilder sb, char c) {
+    switch (c) {
+      case '\\':
+      case '"':
+      case '\'':
+        sb.append('\\').append(c);
+        break;
+      case '\n':
+        sb.append("\\n");
+        break;
+      case '\r':
+        sb.append("\\r");
+        break;
+      case '\t':
+        sb.append("\\t");
+        break;
+      default:
+        if (c < 0x20) {
+          sb.append(String.format("\\%03o", (int) c));
+        } else if (c < 0x7f || Character.isLetter(c)) {
+          sb.append(c);
+        } else {
+          sb.append(String.format("\\u%04x", (int) c));
+        }
+        break;
+    }
+  }
+}
diff --git a/auto/common/src/main/java/com/google/auto/common/MoreElements.java b/auto/common/src/main/java/com/google/auto/common/MoreElements.java
old mode 100644
new mode 100755
index 5e8e3541f0..8fb4b0bb51
--- a/auto/common/src/main/java/com/google/auto/common/MoreElements.java
+++ b/auto/common/src/main/java/com/google/auto/common/MoreElements.java
@@ -212,29 +212,80 @@ public final class MoreElements {
   }
 
   /**
-   * Returns {@code true} iff the given element has an {@link AnnotationMirror} whose
-   * {@linkplain AnnotationMirror#getAnnotationType() annotation type} has the same canonical name
-   * as that of {@code annotationClass}. This method is a safer alternative to calling
-   * {@link Element#getAnnotation} and checking for {@code null} as it avoids any interaction with
+   * Returns {@code true} iff the given element has an {@link AnnotationMirror} whose {@linkplain
+   * AnnotationMirror#getAnnotationType() annotation type} has the same canonical name as that of
+   * {@code annotationClass}. This method is a safer alternative to calling {@link
+   * Element#getAnnotation} and checking for {@code null} as it avoids any interaction with
    * annotation proxies.
    */
-  public static boolean isAnnotationPresent(Element element,
-      Class<? extends Annotation> annotationClass) {
+  public static boolean isAnnotationPresent(
+      Element element, Class<? extends Annotation> annotationClass) {
     return getAnnotationMirror(element, annotationClass).isPresent();
   }
 
+  /**
+   * Returns {@code true} iff the given element has an {@link AnnotationMirror} whose {@linkplain
+   * AnnotationMirror#getAnnotationType() annotation type} has the same fully qualified name as that
+   * of {@code annotation}. This method is a safer alternative to calling {@link
+   * Element#getAnnotation} and checking for {@code null} as it avoids any interaction with
+   * annotation proxies.
+   */
+  public static boolean isAnnotationPresent(Element element, TypeElement annotation) {
+    return getAnnotationMirror(element, annotation).isPresent();
+  }
+
+  /**
+   * Returns {@code true} iff the given element has an {@link AnnotationMirror} whose {@linkplain
+   * AnnotationMirror#getAnnotationType() annotation type} has {@code annotationName} as its
+   * canonical name. This method is a safer alternative to calling {@link Element#getAnnotation} and
+   * checking for {@code null} as it avoids any interaction with annotation proxies.
+   */
+  public static boolean isAnnotationPresent(Element element, String annotationName) {
+    return getAnnotationMirror(element, annotationName).isPresent();
+  }
+
   /**
    * Returns an {@link AnnotationMirror} for the annotation of type {@code annotationClass} on
    * {@code element}, or {@link Optional#absent()} if no such annotation exists. This method is a
    * safer alternative to calling {@link Element#getAnnotation} as it avoids any interaction with
    * annotation proxies.
    */
-  public static Optional<AnnotationMirror> getAnnotationMirror(Element element,
-      Class<? extends Annotation> annotationClass) {
-    String annotationClassName = annotationClass.getCanonicalName();
+  public static Optional<AnnotationMirror> getAnnotationMirror(
+      Element element, Class<? extends Annotation> annotationClass) {
+    String name = annotationClass.getCanonicalName();
+    if (name == null) {
+      return Optional.absent();
+    }
+    return getAnnotationMirror(element, name);
+  }
+
+  /**
+   * Returns an {@link AnnotationMirror} for the annotation of type {@code annotation} on {@code
+   * element}, or {@link Optional#absent()} if no such annotation exists. This method is a safer
+   * alternative to calling {@link Element#getAnnotation} as it avoids any interaction with
+   * annotation proxies.
+   */
+  public static Optional<AnnotationMirror> getAnnotationMirror(
+      Element element, TypeElement annotation) {
+    for (AnnotationMirror elementAnnotation : element.getAnnotationMirrors()) {
+      if (elementAnnotation.getAnnotationType().asElement().equals(annotation)) {
+        return Optional.of(elementAnnotation);
+      }
+    }
+    return Optional.absent();
+  }
+
+  /**
+   * Returns an {@link AnnotationMirror} for the annotation whose type's canonical name is on {@code
+   * element}, or {@link Optional#absent()} if no such annotation exists. This method is a safer
+   * alternative to calling {@link Element#getAnnotation} as it avoids any interaction with
+   * annotation proxies.
+   */
+  public static Optional<AnnotationMirror> getAnnotationMirror(
+      Element element, String annotationName) {
     for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) {
       TypeElement annotationTypeElement = asType(annotationMirror.getAnnotationType().asElement());
-      if (annotationTypeElement.getQualifiedName().contentEquals(annotationClassName)) {
+      if (annotationTypeElement.getQualifiedName().contentEquals(annotationName)) {
         return Optional.of(annotationMirror);
       }
     }
-- 
2.42.0


  • external/jarjar
git clone https://android.googlesource.com/platform/external/jarjar -b android-14.0.0_r74
  • external/kotlinpoet

新增kotlinpoet库

git clone https://android.googlesource.com/platform/external/kotlinpoet -b android-14.0.0_r74
  • external/ksp

新增ksp库

git clone https://android.googlesource.com/platform/external/ksp -b android-14.0.0_r74
  • external/okio

47fb0ddcd0bcf768a897dff723a1699341eea10f升级到3.7.0

git clone https://android.googlesource.com/platform/external/okio -b android-14.0.0_r74
  • framework/base

按照以下patch修改代码:

From 7c4cb0d34fff2dc539c71846fa27ca31a9937098 Mon Sep 17 00:00:00 2001
From: pujh <pujh@idste.cn>
Date: Wed, 20 Nov 2024 17:55:32 +0800
Subject: [PATCH] fixed build error

---
 libs/WindowManager/Shell/Android.bp                   |  7 ++++++-
 .../wm/shell/common/FloatingContentCoordinator.kt     |  1 -
 libs/WindowManager/Shell/tests/unittest/Android.bp    |  2 +-
 packages/EasterEgg/Android.bp                         |  2 +-
 packages/SystemUI/Android.bp                          |  6 +++---
 .../src/com/android/systemui/flags/FlagManager.kt     |  4 ++--
 .../com/android/systemui/media/MediaDataManager.kt    |  2 +-
 .../systemui/media/RecommendationViewHolder.kt        |  6 +++---
 .../android/systemui/privacy/PrivacyItemController.kt |  5 +----
 .../src/com/android/systemui/settings/UserTracker.kt  |  4 +---
 .../statusbar/NotificationShadeDepthController.kt     |  1 -
 .../systemui/statusbar/connectivity/SignalCallback.kt | 11 +----------
 .../events/SystemStatusAnimationScheduler.kt          |  9 ++++-----
 .../notification/NotificationWakeUpCoordinator.kt     |  6 +++---
 .../coordinator/dagger/CoordinatorsModule.kt          |  4 ++--
 .../collection/render/SectionHeaderController.kt      |  4 ++--
 .../dagger/NotificationSectionHeadersModule.kt        |  4 ++--
 .../com/android/systemui/util/UserAwareController.kt  |  3 +--
 18 files changed, 34 insertions(+), 47 deletions(-)

diff --git a/libs/WindowManager/Shell/Android.bp b/libs/WindowManager/Shell/Android.bp
index cdff5858..3d791c3c 100644
--- a/libs/WindowManager/Shell/Android.bp
+++ b/libs/WindowManager/Shell/Android.bp
@@ -138,7 +138,12 @@ android_library {
         "dagger2",
         "jsr330",
     ],
-    kotlincflags: ["-Xjvm-default=enable"],
+    libs: [
+        // Soong fails to automatically add this dependency because all the
+        // *.kt sources are inside a filegroup.
+        "kotlin-annotations",
+    ],
+    kotlincflags: ["-Xjvm-default=all"],
     manifest: "AndroidManifest.xml",
     plugins: ["dagger2-compiler"],
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/FloatingContentCoordinator.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/common/FloatingContentCoordinator.kt
index d5d072a8..122dcbb3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/FloatingContentCoordinator.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/FloatingContentCoordinator.kt
@@ -94,7 +94,6 @@ class FloatingContentCoordinator constructor() {
          * non-overlapping.
          * @return The new bounds for this content.
          */
-        @JvmDefault
         fun calculateNewBoundsOnOverlap(
             overlappingContentBounds: Rect,
             otherContentBounds: List<Rect>
diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp
index fb53e535..3e644e67 100644
--- a/libs/WindowManager/Shell/tests/unittest/Android.bp
+++ b/libs/WindowManager/Shell/tests/unittest/Android.bp
@@ -56,7 +56,7 @@ android_test {
         "libstaticjvmtiagent",
     ],
 
-    kotlincflags: ["-Xjvm-default=enable"],
+    kotlincflags: ["-Xjvm-default=all"],
 
     plugins: ["dagger2-compiler"],
 
diff --git a/packages/EasterEgg/Android.bp b/packages/EasterEgg/Android.bp
index f8785f2b..e9fa7f8a 100644
--- a/packages/EasterEgg/Android.bp
+++ b/packages/EasterEgg/Android.bp
@@ -50,5 +50,5 @@ android_app {
 
     manifest: "AndroidManifest.xml",
 
-    kotlincflags: ["-Xjvm-default=enable"],
+    kotlincflags: ["-Xjvm-default=all"],
 }
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index ad1b7082..4c009c42 100755
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -124,7 +124,7 @@ android_library {
     ],
     manifest: "AndroidManifest.xml",
 
-    kotlincflags: ["-Xjvm-default=enable"],
+    kotlincflags: ["-Xjvm-default=all"],
 
     plugins: ["dagger2-compiler"],
 }
@@ -217,7 +217,7 @@ android_library {
         "android.test.runner",
         "android.test.base",
     ],
-    kotlincflags: ["-Xjvm-default=enable"],
+    kotlincflags: ["-Xjvm-default=all"],
     aaptflags: [
         "--extra-packages",
         "com.android.systemui",
@@ -242,7 +242,7 @@ android_app {
         proguard_flags_files: ["proguard.flags"],
     },
 
-    kotlincflags: ["-Xjvm-default=enable"],
+    kotlincflags: ["-Xjvm-default=all"],
 
     dxflags: ["--multi-dex"],
     required: [
diff --git a/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt b/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt
index e61cb5c9..ad1517e8 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt
@@ -94,7 +94,7 @@ class FlagManager constructor(
     fun isEnabled(id: Int): Boolean? {
         val data: String? = Settings.Secure.getString(
             context.contentResolver, keyToSettingsPrefix(id))
-        if (data == null || data?.isEmpty()) {
+        if (data == null || data.isEmpty()) {
             return null
         }
         val json: JSONObject
@@ -169,4 +169,4 @@ class FlagManager constructor(
 class InvalidFlagStorageException : Exception("Data found but is invalid")
 
 class NoFlagResultsException : Exception(
-    "SystemUI failed to communicate its flags back successfully")
\ No newline at end of file
+    "SystemUI failed to communicate its flags back successfully")
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt
index 5d2d556a..ec5bb770 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt
@@ -777,7 +777,7 @@ class MediaDataManager(
     fun onNotificationRemoved(key: String) {
         Assert.isMainThread()
         val removed = mediaEntries.remove(key)
-        if (useMediaResumption && removed?.resumeAction != null && removed?.isLocalSession()) {
+        if (useMediaResumption && removed?.resumeAction != null && removed.isLocalSession()) {
             Log.d(TAG, "Not removing $key because resumable")
             // Move to resume key (aka package name) if that key doesn't already exist.
             val resumeAction = getResumeMediaAction(removed.resumeAction!!)
diff --git a/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt
index 142628cf..497b548e 100644
--- a/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/RecommendationViewHolder.kt
@@ -47,14 +47,14 @@ class RecommendationViewHolder private constructor(itemView: View) {
         itemView.requireViewById(R.id.media_cover4_container),
         itemView.requireViewById(R.id.media_cover5_container),
         itemView.requireViewById(R.id.media_cover6_container))
-    val mediaCoverItemsResIds = listOf<@IntegerRes Int>(
+    val mediaCoverItemsResIds = listOf<Int>(
         R.id.media_cover1,
         R.id.media_cover2,
         R.id.media_cover3,
         R.id.media_cover4,
         R.id.media_cover5,
         R.id.media_cover6)
-    val mediaCoverContainersResIds = listOf<@IntegerRes Int>(
+    val mediaCoverContainersResIds = listOf<Int>(
         R.id.media_cover1_container,
         R.id.media_cover2_container,
         R.id.media_cover3_container,
@@ -131,4 +131,4 @@ class RecommendationViewHolder private constructor(itemView: View) {
             R.id.settings
         )
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt
index e072b4a3..71b2c32c 100644
--- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt
+++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt
@@ -329,13 +329,10 @@ class PrivacyItemController @Inject constructor(
     interface Callback {
         fun onPrivacyItemsChanged(privacyItems: List<PrivacyItem>)
 
-        @JvmDefault
         fun onFlagAllChanged(flag: Boolean) {}
 
-        @JvmDefault
         fun onFlagMicCameraChanged(flag: Boolean) {}
 
-        @JvmDefault
         fun onFlagLocationChanged(flag: Boolean) {}
     }
 
@@ -381,4 +378,4 @@ class PrivacyItemController @Inject constructor(
             listeningCanceller = delegate.executeDelayed({ setListeningState() }, 0L)
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/UserTracker.kt b/packages/SystemUI/src/com/android/systemui/settings/UserTracker.kt
index c7a8fa22..d5b6e2ed 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/UserTracker.kt
+++ b/packages/SystemUI/src/com/android/systemui/settings/UserTracker.kt
@@ -67,13 +67,11 @@ interface UserTracker : UserContentResolverProvider, UserContextProvider {
         /**
          * Notifies that the current user has changed.
          */
-        @JvmDefault
         fun onUserChanged(newUser: Int, userContext: Context) {}
 
         /**
          * Notifies that the current user's profiles have changed.
          */
-        @JvmDefault
         fun onProfilesChanged(profiles: List<UserInfo>) {}
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index 46004db3..ed9ab8c1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -524,7 +524,6 @@ class NotificationShadeDepthController @Inject constructor(
          */
         fun onWallpaperZoomOutChanged(zoomOut: Float)
 
-        @JvmDefault
         fun onBlurRadiusChanged(blurRadius: Int) {}
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt
index 599beecb..fde73127 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt
@@ -29,7 +29,6 @@ interface SignalCallback {
      *
      * @param wifiIndicators a box type containing enough information to properly draw a Wi-Fi icon
      */
-    @JvmDefault
     fun setWifiIndicators(wifiIndicators: WifiIndicators) {}
 
     /**
@@ -42,7 +41,6 @@ interface SignalCallback {
      * NOTE: phones can have multiple subscriptions, so this [mobileDataIndicators] object should be
      * indexed based on its [subId][MobileDataIndicators.subId]
      */
-    @JvmDefault
     fun setMobileDataIndicators(mobileDataIndicators: MobileDataIndicators) {}
 
     /**
@@ -51,7 +49,6 @@ interface SignalCallback {
      *
      * @param subs a [SubscriptionInfo] for each subscription that we know about
      */
-    @JvmDefault
     fun setSubs(subs: List<@JvmSuppressWildcards SubscriptionInfo>) {}
 
     /**
@@ -63,7 +60,6 @@ interface SignalCallback {
      * @param show whether or not to show a "no sim" view
      * @param simDetected whether any SIM is detected or not
      */
-    @JvmDefault
     fun setNoSims(show: Boolean, simDetected: Boolean) {}
 
     /**
@@ -72,7 +68,6 @@ interface SignalCallback {
      *
      * @param icon an [IconState] for the current ethernet status
      */
-    @JvmDefault
     fun setEthernetIndicators(icon: IconState) {}
 
     /**
@@ -80,7 +75,6 @@ interface SignalCallback {
      *
      * @param icon an [IconState] for the current airplane mode status
      */
-    @JvmDefault
     fun setIsAirplaneMode(icon: IconState) {}
 
     /**
@@ -88,7 +82,6 @@ interface SignalCallback {
      *
      * @param enabled the current mobile data feature ennabled state
      */
-    @JvmDefault
     fun setMobileDataEnabled(enabled: Boolean) {}
 
     /**
@@ -97,7 +90,6 @@ interface SignalCallback {
      * @param noValidatedNetwork whether there is any validated network.
      * @param noNetworksAvailable whether there is any WiFi networks available.
      */
-    @JvmDefault
     fun setConnectivityStatus(
         noDefaultNetwork: Boolean,
         noValidatedNetwork: Boolean,
@@ -109,7 +101,6 @@ interface SignalCallback {
      * @param statusIcon the icon for the call indicator
      * @param subId subscription ID for which to update the UI
      */
-    @JvmDefault
     fun setCallIndicator(statusIcon: IconState, subId: Int) {}
 }
 
@@ -184,4 +175,4 @@ data class IconState(
                 .append("contentDescription=").append(contentDescription).append(']')
                 .toString()
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt
index 5a273294..406bfbbd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt
@@ -343,16 +343,15 @@ class SystemStatusAnimationScheduler @Inject constructor(
  * interpolation they choose but realistically these are most likely to be simple alpha transitions
  */
 interface SystemStatusAnimationCallback {
-    @JvmDefault fun onSystemChromeAnimationUpdate(animator: ValueAnimator) {}
-    @JvmDefault fun onSystemChromeAnimationStart() {}
-    @JvmDefault fun onSystemChromeAnimationEnd() {}
+    fun onSystemChromeAnimationUpdate(animator: ValueAnimator) {}
+    fun onSystemChromeAnimationStart() {}
+    fun onSystemChromeAnimationEnd() {}
 
     // Best method name, change my mind
-    @JvmDefault
     fun onSystemStatusAnimationTransitionToPersistentDot(contentDescription: String?): Animator? {
         return null
     }
-    @JvmDefault fun onHidePersistentDot(): Animator? { return null }
+    fun onHidePersistentDot(): Animator? { return null }
 }
 
 interface SystemStatusChipAnimationCallback {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
index 38b5ee88..b03ea867 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
@@ -419,12 +419,12 @@ class NotificationWakeUpCoordinator @Inject constructor(
         /**
          * Called whenever the notifications are fully hidden or shown
          */
-        @JvmDefault fun onFullyHiddenChanged(isFullyHidden: Boolean) {}
+        fun onFullyHiddenChanged(isFullyHidden: Boolean) {}
 
         /**
          * Called whenever the pulseExpansion changes
          * @param expandingChanged if the user has started or stopped expanding
          */
-        @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {}
+        fun onPulseExpansionChanged(expandingChanged: Boolean) {}
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/dagger/CoordinatorsModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/dagger/CoordinatorsModule.kt
index a26d50d2..af91170e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/dagger/CoordinatorsModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/dagger/CoordinatorsModule.kt
@@ -48,7 +48,7 @@ interface CoordinatorsSubcomponent {
 }
 
 @Module(includes = [SensitiveContentCoordinatorModule::class])
-private abstract class InternalCoordinatorsModule {
+abstract class InternalCoordinatorsModule {
     @Binds
     @Internal
     abstract fun bindNotifCoordinators(impl: NotifCoordinatorsImpl): NotifCoordinators
@@ -62,4 +62,4 @@ private annotation class Internal
 @Scope
 @MustBeDocumented
 @Retention(AnnotationRetention.RUNTIME)
-annotation class CoordinatorScope
\ No newline at end of file
+annotation class CoordinatorScope
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt
index 8c15647c..7a135c6a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/SectionHeaderController.kt
@@ -38,7 +38,7 @@ interface SectionHeaderController {
 }
 
 @SectionHeaderScope
-internal class SectionHeaderNodeControllerImpl @Inject constructor(
+class SectionHeaderNodeControllerImpl @Inject constructor(
     @NodeLabel override val nodeLabel: String,
     private val layoutInflater: LayoutInflater,
     @HeaderText @StringRes private val headerTextResId: Int,
@@ -96,4 +96,4 @@ internal class SectionHeaderNodeControllerImpl @Inject constructor(
 
     override val view: View
         get() = _view!!
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt
index 2a9cfd03..75801a8d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationSectionHeadersModule.kt
@@ -145,7 +145,7 @@ interface SectionHeaderControllerSubcomponent {
 }
 
 @Module
-private abstract class SectionHeaderBindingModule {
+abstract class SectionHeaderBindingModule {
     @Binds abstract fun bindsNodeController(impl: SectionHeaderNodeControllerImpl): NodeController
     @Binds abstract fun bindsSectionHeaderController(
         impl: SectionHeaderNodeControllerImpl
@@ -182,4 +182,4 @@ annotation class HeaderClickAction
 
 @Scope
 @Retention(AnnotationRetention.BINARY)
-annotation class SectionHeaderScope
\ No newline at end of file
+annotation class SectionHeaderScope
diff --git a/packages/SystemUI/src/com/android/systemui/util/UserAwareController.kt b/packages/SystemUI/src/com/android/systemui/util/UserAwareController.kt
index 693c2708..cf3ab99b 100644
--- a/packages/SystemUI/src/com/android/systemui/util/UserAwareController.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/UserAwareController.kt
@@ -23,8 +23,7 @@ import android.os.UserHandle
  * changes.
  */
 interface UserAwareController {
-    @JvmDefault
     fun changeUser(newUser: UserHandle) {}
 
     val currentUserId: Int
-}
\ No newline at end of file
+}
-- 
2.42.0


  • tools/metalava

修改metalava/src/main/java/com/android/tools/metalava/model/text/TextTypeItem.kt文件

image.png

  • packages/modules/common/build/allowed_deps.txt

修改packages/modules/common/build/allowed_deps.txt文件

image.png

  • packages/modules/Permission/PermissionController

修改PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt文件

image.png

修改PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt文件

image.png

  • packages/apps/DeskClock

修改DeskClock/src/com/android/deskclock/alarms/AlarmActivity.kt文件

image.png

修改DeskClock/src/com/android/deskclock/timer/TimerItem.kt文件

image.png

  • prebuilts/misc/common/asm

参照: android.googlesource.com/platform/pr…

增加asm 9.2相关jar文件,并同步修改Android.bp

diff --git a/misc/common/asm/Android.bp b/misc/common/asm/Android.bp
old mode 100644
new mode 100755
index 86ca4d6c5..3068d0eef
--- a/misc/common/asm/Android.bp
+++ b/misc/common/asm/Android.bp
@@ -123,3 +123,54 @@ java_import {
     jars: ["asm-util-7.0.jar"],
     defaults: ["asm-7.0-defaults"],
 }
+
+java_defaults {
+    name: "asm-9.2-defaults",
+    apex_available: [
+        "//apex_available:anyapex",
+        "//apex_available:platform",
+    ],
+}
+
+filegroup {
+    name: "asm-9.2-filegroup",
+    srcs: ["asm-9.2.jar"],
+    visibility: [
+        "//art/test:__subpackages__",
+    ],
+}
+
+java_import {
+    name: "asm-9.2",
+    host_supported: true,
+    jars: ["asm-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
+}
+
+java_import {
+    name: "asm-analysis-9.2",
+    host_supported: true,
+    jars: ["asm-analysis-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
+}
+
+java_import {
+    name: "asm-commons-9.2",
+    host_supported: true,
+    jars: ["asm-commons-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
+}
+
+java_import {
+    name: "asm-tree-9.2",
+    host_supported: true,
+    jars: ["asm-tree-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
+}
+
+java_import {
+    name: "asm-util-9.2",
+    host_supported: true,
+    jars: ["asm-util-9.2.jar"],
+    defaults: ["asm-9.2-defaults"],
+}

  • prebuilts/sdk/current/androidx/Android.bp
  1. room版本从2.3.0-beta02更新到2.6.1
  2. sqlite版本从2.2.0-alpha01更新到2.4.0-alpha01

修改Android.bp,同时需要增加对应jar文件

diff --git a/sdk/current/androidx/Android.bp b/sdk/current/androidx/Android.bp
old mode 100644
new mode 100755
index f0f21597e..0fb55d65b
--- a/sdk/current/androidx/Android.bp
+++ b/sdk/current/androidx/Android.bp
@@ -2912,7 +2912,7 @@ android_library {
 
 java_import {
     name: "androidx.room_room-common-nodeps",
-    jars: ["m2repository/androidx/room/room-common/2.3.0-beta02/room-common-2.3.0-beta02.jar"],
+    jars: ["m2repository/androidx/room/room-common/2.6.1/room-common-2.6.1.jar"],
     sdk_version: "30",
     host_supported: true,
     apex_available: [
@@ -2934,13 +2934,15 @@ java_library_static {
     static_libs: [
         "androidx.room_room-common-nodeps",
         "androidx.annotation_annotation",
+        "kotlin-stdlib-jdk8",
+        "kotlin-stdlib",
     ],
     java_version: "1.7",
 }
 
 java_import_host {
     name: "androidx.room_room-compiler-processing-nodeps",
-    jars: ["m2repository/androidx/room/room-compiler-processing/2.3.0-beta02/room-compiler-processing-2.3.0-beta02.jar"],
+    jars: ["m2repository/androidx/room/room-compiler-processing/2.6.1/room-compiler-processing-2.6.1.jar"],
     sdk_version: "30",
 }
 
@@ -2948,15 +2950,15 @@ java_library_host {
     name: "androidx.room_room-compiler-processing",
     static_libs: [
         "androidx.room_room-compiler-processing-nodeps",
-        "kotlin-stdlib",
-        "javapoet",
-        "androidx.annotation_annotation",
-        "guava",
         "auto_common",
         "auto_value_annotations",
-        "kotlinx-metadata-jvm",
-        "jetbrains-annotations",
         "symbol-processing-api",
+        "guava",
+        "jetbrains-annotations",
+        "javapoet",
+        "kotlinpoet",
+        "kotlinpoet-javapoet",
+        "kotlin-stdlib",
         "kotlin-stdlib-jdk8",
     ],
     java_version: "1.7",
@@ -2964,7 +2966,7 @@ java_library_host {
 
 java_import_host {
     name: "androidx.room_room-compiler-nodeps",
-    jars: ["m2repository/androidx/room/room-compiler/2.3.0-beta02/room-compiler-2.3.0-beta02.jar"],
+    jars: ["m2repository/androidx/room/room-compiler/2.6.1/room-compiler-2.6.1.jar"],
     sdk_version: "30",
 }
 
@@ -2973,25 +2975,100 @@ java_library_host {
     static_libs: [
         "androidx.room_room-compiler-nodeps",
         "androidx.room_room-common",
-        "androidx.room_room-migration",
         "androidx.room_room-compiler-processing",
-        "kotlin-stdlib",
+        "androidx.room_room-migration",
         "auto_common",
         "auto_value_annotations",
-        "javapoet",
         "symbol-processing-api",
-        "xerial-sqlite-jdbc",
-        "kotlinx-metadata-jvm",
-        "commons-codec",
         "jetbrains-annotations",
-        "guava-21.0",
+        "javapoet",
+        "kotlinpoet",
+        "kotlinpoet-javapoet",
+        "commons-codec",
+        "kotlin-stdlib",
+        "xerial-sqlite-jdbc",
+        "guava",
+    ],
+    java_version: "1.7",
+}
+
+android_library_import {
+    name: "androidx.room_room-guava-nodeps",
+    aars: ["m2repository/androidx/room/room-guava/2.6.1/room-guava-2.6.1.aar"],
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    static_libs: [
+        "androidx.annotation_annotation",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.room_room-common",
+        "androidx.arch.core_core-runtime",
+        "androidx.room_room-runtime",
+    ],
+}
+
+android_library {
+    name: "androidx.room_room-guava",
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    manifest: "manifests/androidx.room_room-guava/AndroidManifest.xml",
+    static_libs: [
+        "androidx.room_room-guava-nodeps",
+        "androidx.annotation_annotation",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.room_room-common",
+        "androidx.arch.core_core-runtime",
+        "androidx.room_room-runtime",
+    ],
+    java_version: "1.7",
+}
+
+android_library_import {
+    name: "androidx.room_room-ktx-nodeps",
+    aars: ["m2repository/androidx/room/room-ktx/2.6.1/room-ktx-2.6.1.aar"],
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    static_libs: [
+        "androidx.room_room-common",
+        "kotlin-stdlib",
+        "kotlinx_coroutines_android",
+        "androidx.room_room-runtime",
+    ],
+}
+
+android_library {
+    name: "androidx.room_room-ktx",
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    manifest: "manifests/androidx.room_room-ktx/AndroidManifest.xml",
+    static_libs: [
+        "androidx.room_room-ktx-nodeps",
+        "androidx.room_room-common",
+        "kotlin-stdlib",
+        "kotlinx_coroutines_android",
+        "androidx.room_room-runtime",
     ],
     java_version: "1.7",
 }
 
 java_import {
     name: "androidx.room_room-migration-nodeps",
-    jars: ["m2repository/androidx/room/room-migration/2.3.0-beta02/room-migration-2.3.0-beta02.jar"],
+    jars: ["m2repository/androidx/room/room-migration/2.6.1/room-migration-2.6.1.jar"],
     sdk_version: "30",
     host_supported: true,
     apex_available: [
@@ -3013,15 +3090,87 @@ java_library_static {
     static_libs: [
         "androidx.room_room-migration-nodeps",
         "androidx.room_room-common",
-        "kotlin-stdlib",
         "gson-prebuilt-jar",
+        "kotlin-stdlib",
+    ],
+    java_version: "1.7",
+}
+
+android_library_import {
+    name: "androidx.room_room-paging-guava-nodeps",
+    aars: ["m2repository/androidx/room/room-paging-guava/2.6.1/room-paging-guava-2.6.1.aar"],
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    static_libs: [
+        "kotlin-stdlib",
+        "androidx.paging_paging-guava",
+        "androidx.room_room-guava",
+        "androidx.room_room-paging",
+    ],
+}
+
+android_library {
+    name: "androidx.room_room-paging-guava",
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    manifest: "manifests/androidx.room_room-paging-guava/AndroidManifest.xml",
+    static_libs: [
+        "androidx.room_room-paging-guava-nodeps",
+        "kotlin-stdlib",
+        "androidx.paging_paging-guava",
+        "androidx.room_room-guava",
+        "androidx.room_room-paging",
+    ],
+    java_version: "1.7",
+}
+
+android_library_import {
+    name: "androidx.room_room-paging-nodeps",
+    aars: ["m2repository/androidx/room/room-paging/2.6.1/room-paging-2.6.1.aar"],
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    static_libs: [
+        "androidx.paging_paging-common",
+        "kotlin-stdlib",
+        "androidx.room_room-ktx",
+        "androidx.room_room-runtime",
+    ],
+}
+
+android_library {
+    name: "androidx.room_room-paging",
+    sdk_version: "30",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    min_sdk_version: "14",
+    manifest: "manifests/androidx.room_room-paging/AndroidManifest.xml",
+    static_libs: [
+        "androidx.room_room-paging-nodeps",
+        "androidx.paging_paging-common",
+        "kotlin-stdlib",
+        "androidx.room_room-ktx",
+        "androidx.room_room-runtime",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "androidx.room_room-runtime-nodeps",
-    aars: ["m2repository/androidx/room/room-runtime/2.3.0-beta02/room-runtime-2.3.0-beta02.aar"],
+    aars: ["m2repository/androidx/room/room-runtime/2.6.1/room-runtime-2.6.1.aar"],
     sdk_version: "30",
     apex_available: [
         "//apex_available:platform",
@@ -3030,10 +3179,10 @@ android_library_import {
     min_sdk_version: "14",
     static_libs: [
         "androidx.room_room-common",
-        "androidx.sqlite_sqlite-framework",
-        "androidx.sqlite_sqlite",
-        "androidx.arch.core_core-runtime",
         "androidx.annotation_annotation-experimental",
+        "androidx.arch.core_core-runtime",
+        "androidx.sqlite_sqlite",
+        "androidx.sqlite_sqlite-framework",
     ],
 }
 
@@ -3049,17 +3198,17 @@ android_library {
     static_libs: [
         "androidx.room_room-runtime-nodeps",
         "androidx.room_room-common",
-        "androidx.sqlite_sqlite-framework",
-        "androidx.sqlite_sqlite",
-        "androidx.arch.core_core-runtime",
         "androidx.annotation_annotation-experimental",
+        "androidx.arch.core_core-runtime",
+        "androidx.sqlite_sqlite",
+        "androidx.sqlite_sqlite-framework",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "androidx.room_room-testing-nodeps",
-    aars: ["m2repository/androidx/room/room-testing/2.3.0-beta02/room-testing-2.3.0-beta02.aar"],
+    aars: ["m2repository/androidx/room/room-testing/2.6.1/room-testing-2.6.1.aar"],
     sdk_version: "30",
     apex_available: [
         "//apex_available:platform",
@@ -3070,10 +3219,10 @@ android_library_import {
         "androidx.room_room-common",
         "androidx.room_room-migration",
         "junit",
+        "androidx.arch.core_core-runtime",
         "androidx.room_room-runtime",
         "androidx.sqlite_sqlite",
         "androidx.sqlite_sqlite-framework",
-        "androidx.arch.core_core-runtime",
     ],
 }
 
@@ -3091,10 +3240,10 @@ android_library {
         "androidx.room_room-common",
         "androidx.room_room-migration",
         "junit",
+        "androidx.arch.core_core-runtime",
         "androidx.room_room-runtime",
         "androidx.sqlite_sqlite",
         "androidx.sqlite_sqlite-framework",
-        "androidx.arch.core_core-runtime",
     ],
     java_version: "1.7",
 }
@@ -3311,7 +3460,7 @@ android_library {
 
 android_library_import {
     name: "androidx.sqlite_sqlite-framework-nodeps",
-    aars: ["m2repository/androidx/sqlite/sqlite-framework/2.2.0-alpha01/sqlite-framework-2.2.0-alpha01.aar"],
+    aars: ["m2repository/androidx/sqlite/sqlite-framework/2.4.0-alpha01/sqlite-framework-2.4.0-alpha01.aar"],
     sdk_version: "30",
     apex_available: [
         "//apex_available:platform",
@@ -3343,7 +3492,7 @@ android_library {
 
 android_library_import {
     name: "androidx.sqlite_sqlite-nodeps",
-    aars: ["m2repository/androidx/sqlite/sqlite/2.2.0-alpha01/sqlite-2.2.0-alpha01.aar"],
+    aars: ["m2repository/androidx/sqlite/sqlite/2.4.0-alpha01/sqlite-2.4.0-alpha01.aar"],
     sdk_version: "30",
     apex_available: [
         "//apex_available:platform",
  • prebuilts/tools/common/m2/Android.bp
  1. gson-prebuilt-jar版本从2.8.0升级到2.10.1版本
  2. kotlinx-metadata-jvm版本从0.1.0升级到0.6.0版本

修改Android.bp,同时需要增加对应jar文件

diff --git a/tools/common/m2/Android.bp b/tools/common/m2/Android.bp
old mode 100644
new mode 100755
index 630a90d60..88848ad67
--- a/tools/common/m2/Android.bp
+++ b/tools/common/m2/Android.bp
@@ -78,7 +78,7 @@ java_import_host {
 
 java_import {
     name: "gson-prebuilt-jar",
-    jars: ["repository/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar"],
+    jars: ["repository/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar"],
     sdk_version: "current",
     host_supported: true,
 }
@@ -229,7 +229,7 @@ java_import {
 // TODO: remove in favor of kotlinx_metadata_jvm
 java_import {
     name: "kotlinx-metadata-jvm",
-    jars: ["repository/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0.jar"],
+    jars: ["repository/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.6.0/kotlinx-metadata-jvm-0.6.0.jar"],
     host_supported: true,
 }
 
@@ -268,42 +268,6 @@ java_import {
     host_supported: true,
 }
 
-java_import {
-    name: "kotlinx-coroutines-core-nodeps",
-    jars: ["repository/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.3.0/kotlinx-coroutines-core-1.3.0.jar"],
-}
-
-// TODO: remove in favor of kotlinx_coroutines
-java_library_static {
-    name: "kotlinx-coroutines-core",
-    static_libs: [
-        "kotlinx-coroutines-core-nodeps",
-        "kotlin-stdlib"
-    ],
-    sdk_version: "current",
-}
-
-java_import {
-    name: "kotlinx-coroutines-android-nodeps",
-    jars: ["repository/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.3.0/kotlinx-coroutines-android-1.3.0.jar"],
-}
-
-// TODO: remove in favor of kotlinx_coroutines_android
-java_library_static {
-    name: "kotlinx-coroutines-android",
-    static_libs: [
-        "kotlin-stdlib",
-        "kotlinx-coroutines-core",
-        "kotlinx-coroutines-android-nodeps"
-    ],
-    sdk_version: "current",
-}
-
-java_import {
-    name: "kotlinx-coroutines-core-jvm",
-    jars: ["repository/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.4.2/kotlinx-coroutines-core-jvm-1.4.2.jar"],
-}
-
 java_import_host {
     name: "javax-annotation-api-prebuilt-host-jar",
     jars: ["repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar"],