From 511a814a109169383f6aecad2ba86e4e5c770345 Mon Sep 17 00:00:00 2001 From: David Su Date: Thu, 9 Jan 2020 14:02:21 -0800 Subject: [PATCH 1/3] Jarjar utils into framework-wifi and share with wifi-service Jarjar utility classes used by both framework-wifi and wifi-service into framework-wifi and allow them to be referenced by wifi-service. Create framework-wifi-util-lib which contains utility classes that we will copy into the Wifi module. It is statically linked into framework-wifi and dynamically linked by wifi-service. Create framework-wifi-pre-jarjar to allow wifi-service to use the pre-rename symbols in framework-wifi-util-lib. In essence: 1. build framework-wifi-util-lib, framework-wifi-pre-jarjar, wifi-service-pre-jarjar using original symbol names. 2. rename everything afterwards at the same time. This ensures that all symbol names are consistent at each step in the build process. Bug: 142886292 Test: device boots up and connects to wifi Change-Id: I27b3519657d652787714b4b34de6cdbfef2a81e4 --- Android.bp | 26 ++++++++++++++++++++++++-- wifi/Android.bp | 29 ++++++++++++++++++++++++++++- wifi/jarjar-rules.txt | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 wifi/jarjar-rules.txt diff --git a/Android.bp b/Android.bp index 8c85631390832..9a0bd737229e1 100644 --- a/Android.bp +++ b/Android.bp @@ -604,6 +604,7 @@ gensrcs { filegroup { name: "framework-annotations", srcs: [ + "core/java/android/annotation/CheckResult.java", "core/java/android/annotation/IntDef.java", "core/java/android/annotation/IntRange.java", "core/java/android/annotation/NonNull.java", @@ -615,6 +616,7 @@ filegroup { "core/java/android/annotation/UnsupportedAppUsage.java", "core/java/com/android/internal/annotations/GuardedBy.java", "core/java/com/android/internal/annotations/VisibleForTesting.java", + "core/java/com/android/internal/annotations/Immutable.java", ], } @@ -1148,10 +1150,31 @@ filegroup { ], } +// utility classes statically linked into framework-wifi and dynamically linked +// into wifi-service +java_library { + name: "framework-wifi-util-lib", + sdk_version: "core_current", + srcs: [ + "core/java/android/content/pm/BaseParceledListSlice.java", + "core/java/android/content/pm/ParceledListSlice.java", + "core/java/com/android/internal/util/AsyncChannel.java", + "core/java/com/android/internal/util/AsyncService.java", + "core/java/com/android/internal/util/Protocol.java", + "core/java/com/android/internal/util/Preconditions.java", + ], + libs: [ + "framework-annotations-lib", + "unsupportedappusage", + "android_system_stubs_current", + ], + visibility: ["//frameworks/base/wifi"], +} + +// utility classes statically linked into wifi-service filegroup { name: "framework-wifi-service-shared-srcs", srcs: [ - ":framework-annotations", "core/java/android/net/InterfaceConfiguration.java", "core/java/android/os/BasicShellCommandHandler.java", "core/java/android/os/HandlerExecutor.java", @@ -1162,7 +1185,6 @@ filegroup { "core/java/com/android/internal/util/HexDump.java", "core/java/com/android/internal/util/IState.java", "core/java/com/android/internal/util/MessageUtils.java", - "core/java/com/android/internal/util/Preconditions.java", "core/java/com/android/internal/util/State.java", "core/java/com/android/internal/util/StateMachine.java", "core/java/com/android/internal/util/WakeupMessage.java", diff --git a/wifi/Android.bp b/wifi/Android.bp index 286be0b82db70..a69803a435e2c 100644 --- a/wifi/Android.bp +++ b/wifi/Android.bp @@ -52,10 +52,15 @@ test_access_hidden_api_whitelist = [ "//external/robolectric-shadows:__subpackages__", ] +// wifi-service needs pre-jarjared version of framework-wifi so it can reference copied utility +// classes before they are renamed. java_library { - name: "framework-wifi", + name: "framework-wifi-pre-jarjar", // TODO(b/140299412) should be core_current once we build against framework-system-stubs sdk_version: "core_platform", + static_libs: [ + "framework-wifi-util-lib", + ], libs: [ // TODO(b/140299412) should be framework-system-stubs once we fix all @hide dependencies "framework-minus-apex", @@ -64,6 +69,23 @@ java_library { srcs: [ ":framework-wifi-updatable-sources", ], + installable: false, + visibility: [ + "//frameworks/opt/net/wifi/service", + "//frameworks/opt/net/wifi/tests/wifitests", + ], +} + +// post-jarjar version of framework-wifi +java_library { + name: "framework-wifi", + // TODO(b/140299412) should be core_current once we build against framework-system-stubs + sdk_version: "core_platform", + static_libs: [ + "framework-wifi-pre-jarjar", + ], + jarjar_rules: ":wifi-jarjar-rules", + installable: true, optimize: { enabled: false @@ -122,3 +144,8 @@ java_defaults { ], visibility: test_access_hidden_api_whitelist, } + +filegroup { + name: "wifi-jarjar-rules", + srcs: ["jarjar-rules.txt"], +} diff --git a/wifi/jarjar-rules.txt b/wifi/jarjar-rules.txt new file mode 100644 index 0000000000000..f0da1ec540808 --- /dev/null +++ b/wifi/jarjar-rules.txt @@ -0,0 +1,37 @@ +rule android.net.InterfaceConfigurationParcel* @0 +rule android.net.InterfaceConfiguration* com.android.server.x.wifi.net.InterfaceConfiguration@1 + +# We don't jar-jar the entire package because, we still use some classes (like +# AsyncChannel in com.android.internal.util) from these packages which are not +# inside our jar (currently in framework.jar, but will be in wifisdk.jar in the future). +rule com.android.internal.util.FastXmlSerializer* com.android.server.x.wifi.util.FastXmlSerializer@1 +rule com.android.internal.util.HexDump* com.android.server.x.wifi.util.HexDump@1 +rule com.android.internal.util.IState* com.android.server.x.wifi.util.IState@1 +rule com.android.internal.util.MessageUtils* com.android.server.x.wifi.util.MessageUtils@1 +rule com.android.internal.util.State* com.android.server.x.wifi.util.State@1 +rule com.android.internal.util.StateMachine* com.android.server.x.wifi.util.StateMachine@1 +rule com.android.internal.util.WakeupMessage* com.android.server.x.wifi.util.WakeupMessage@1 +rule com.android.internal.util.XmlUtils* com.android.server.x.wifi.util.XmlUtils@1 + +rule android.util.BackupUtils* com.android.server.x.wifi.util.BackupUtils@1 +rule android.util.LocalLog* com.android.server.x.wifi.util.LocalLog@1 +rule android.util.Rational* com.android.server.x.wifi.util.Rational@1 + +rule android.os.BasicShellCommandHandler* com.android.server.x.wifi.os.BasicShellCommandHandler@1 +rule android.os.HandlerExecutor* com.android.server.x.wifi.os.HandlerExecutor@1 + +# Use our statically linked bouncy castle library +rule org.bouncycastle.** com.android.server.x.wifi.bouncycastle.@1 +# Use our statically linked protobuf library +rule com.google.protobuf.** com.android.server.x.wifi.protobuf.@1 +# Use our statically linked PlatformProperties library +rule android.sysprop.** com.android.server.x.wifi.sysprop.@1 + + +# used by both framework-wifi and wifi-service +rule android.content.pm.BaseParceledListSlice* android.x.net.wifi.util.BaseParceledListSlice@1 +rule android.content.pm.ParceledListSlice* android.x.net.wifi.util.ParceledListSlice@1 +rule com.android.internal.util.AsyncChannel* android.x.net.wifi.util.AsyncChannel@1 +rule com.android.internal.util.AsyncService* android.x.net.wifi.util.AsyncService@1 +rule com.android.internal.util.Preconditions* android.x.net.wifi.util.Preconditions@1 +rule com.android.internal.util.Protocol* android.x.net.wifi.util.Protocol@1 From 369c920552d28b3ac759035f89af06f83b9db684 Mon Sep 17 00:00:00 2001 From: David Su Date: Thu, 9 Jan 2020 18:09:56 -0800 Subject: [PATCH 2/3] Jarjar more classes into framework-wifi Jarjar annotations, Inet4AddressUtils, and HandlerExecutor into framework-wifi.jar. Statically link Wifi hardware constants as well. Bug: 142886292 Test: boots up and connects to wifi Change-Id: Ib0e2e55ae5158d65dd012511ac3d4d2a73225b57 --- Android.bp | 13 ++++++++++--- wifi/Android.bp | 5 ++++- wifi/jarjar-rules.txt | 4 +++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Android.bp b/Android.bp index 9a0bd737229e1..40af203443a67 100644 --- a/Android.bp +++ b/Android.bp @@ -348,7 +348,6 @@ java_library { "android.hardware.vibrator-V1.1-java", "android.hardware.vibrator-V1.2-java", "android.hardware.vibrator-V1.3-java", - "android.hardware.wifi-V1.0-java-constants", "devicepolicyprotosnano", "com.android.sysprop.apex", @@ -506,7 +505,10 @@ java_library { defaults: ["framework-defaults"], srcs: [":framework-all-sources"], installable: false, - static_libs: ["exoplayer2-core"], + static_libs: [ + "exoplayer2-core", + "android.hardware.wifi-V1.0-java-constants", + ], apex_available: ["//apex_available:platform"], } @@ -604,6 +606,7 @@ gensrcs { filegroup { name: "framework-annotations", srcs: [ + "core/java/android/annotation/CallbackExecutor.java", "core/java/android/annotation/CheckResult.java", "core/java/android/annotation/IntDef.java", "core/java/android/annotation/IntRange.java", @@ -611,7 +614,9 @@ filegroup { "core/java/android/annotation/Nullable.java", "core/java/android/annotation/RequiresPermission.java", "core/java/android/annotation/SdkConstant.java", + "core/java/android/annotation/StringDef.java", "core/java/android/annotation/SystemApi.java", + "core/java/android/annotation/SystemService.java", "core/java/android/annotation/TestApi.java", "core/java/android/annotation/UnsupportedAppUsage.java", "core/java/com/android/internal/annotations/GuardedBy.java", @@ -1158,10 +1163,13 @@ java_library { srcs: [ "core/java/android/content/pm/BaseParceledListSlice.java", "core/java/android/content/pm/ParceledListSlice.java", + "core/java/android/net/shared/Inet4AddressUtils.java", + "core/java/android/os/HandlerExecutor.java", "core/java/com/android/internal/util/AsyncChannel.java", "core/java/com/android/internal/util/AsyncService.java", "core/java/com/android/internal/util/Protocol.java", "core/java/com/android/internal/util/Preconditions.java", + "telephony/java/android/telephony/Annotation.java", ], libs: [ "framework-annotations-lib", @@ -1177,7 +1185,6 @@ filegroup { srcs: [ "core/java/android/net/InterfaceConfiguration.java", "core/java/android/os/BasicShellCommandHandler.java", - "core/java/android/os/HandlerExecutor.java", "core/java/android/util/BackupUtils.java", "core/java/android/util/LocalLog.java", "core/java/android/util/Rational.java", diff --git a/wifi/Android.bp b/wifi/Android.bp index a69803a435e2c..6326f14bc6fdc 100644 --- a/wifi/Android.bp +++ b/wifi/Android.bp @@ -60,11 +60,14 @@ java_library { sdk_version: "core_platform", static_libs: [ "framework-wifi-util-lib", + "android.hardware.wifi-V1.0-java-constants", ], libs: [ // TODO(b/140299412) should be framework-system-stubs once we fix all @hide dependencies "framework-minus-apex", - "unsupportedappusage", + "framework-annotations-lib", + "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage + "unsupportedappusage-annotation", // for dalvik.annotation.compat.UnsupportedAppUsage ], srcs: [ ":framework-wifi-updatable-sources", diff --git a/wifi/jarjar-rules.txt b/wifi/jarjar-rules.txt index f0da1ec540808..0746d62d51153 100644 --- a/wifi/jarjar-rules.txt +++ b/wifi/jarjar-rules.txt @@ -18,7 +18,6 @@ rule android.util.LocalLog* com.android.server.x.wifi.util.LocalLog@1 rule android.util.Rational* com.android.server.x.wifi.util.Rational@1 rule android.os.BasicShellCommandHandler* com.android.server.x.wifi.os.BasicShellCommandHandler@1 -rule android.os.HandlerExecutor* com.android.server.x.wifi.os.HandlerExecutor@1 # Use our statically linked bouncy castle library rule org.bouncycastle.** com.android.server.x.wifi.bouncycastle.@1 @@ -31,6 +30,9 @@ rule android.sysprop.** com.android.server.x.wifi.sysprop.@1 # used by both framework-wifi and wifi-service rule android.content.pm.BaseParceledListSlice* android.x.net.wifi.util.BaseParceledListSlice@1 rule android.content.pm.ParceledListSlice* android.x.net.wifi.util.ParceledListSlice@1 +rule android.net.shared.Inet4AddressUtils* android.x.net.wifi.util.Inet4AddressUtils@1 +rule android.os.HandlerExecutor* android.x.net.wifi.util.HandlerExecutor@1 +rule android.telephony.Annotation* android.x.net.wifi.util.TelephonyAnnotation@1 rule com.android.internal.util.AsyncChannel* android.x.net.wifi.util.AsyncChannel@1 rule com.android.internal.util.AsyncService* android.x.net.wifi.util.AsyncService@1 rule com.android.internal.util.Preconditions* android.x.net.wifi.util.Preconditions@1 From 7f528b9a3309f3a3ffc16827954e9acaefe7cf6b Mon Sep 17 00:00:00 2001 From: David Su Date: Fri, 10 Jan 2020 12:37:24 -0800 Subject: [PATCH 3/3] SystemService annotation: Remove import of Context Remove import of Context to allow this annotation to be statically linked easily. Bug: 142886292 Test: compiles Change-Id: I74b02d562a9df1729e4046c7a1e6d5d8033f21e2 --- core/java/android/annotation/SystemService.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core/java/android/annotation/SystemService.java b/core/java/android/annotation/SystemService.java index 0c5d15e178a34..c05c1bab06d22 100644 --- a/core/java/android/annotation/SystemService.java +++ b/core/java/android/annotation/SystemService.java @@ -19,14 +19,12 @@ package android.annotation; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.SOURCE; -import android.content.Context; - import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * Description of a system service available through - * {@link Context#getSystemService(Class)}. This is used to auto-generate + * {@link android.content.Context#getSystemService(Class)}. This is used to auto-generate * documentation explaining how to obtain a reference to the service. * * @hide @@ -36,9 +34,9 @@ import java.lang.annotation.Target; public @interface SystemService { /** * The string name of the system service that can be passed to - * {@link Context#getSystemService(String)}. + * {@link android.content.Context#getSystemService(String)}. * - * @see Context#getSystemServiceName(Class) + * @see android.content.Context#getSystemServiceName(Class) */ String value(); }