Merge "Remove mSubscriberIdMatchRule from NetworkTemplate"
diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java
index e5fe3f8..ace5f15 100644
--- a/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java
+++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java
@@ -154,9 +154,9 @@
private static final int INVALID_IFINDEX = 0;
private static final int UPSTREAM_IFINDEX = 1001;
- private static final int UPSTREAM_IFINDEX2 = 1002;
- private static final int DOWNSTREAM_IFINDEX = 1003;
- private static final int DOWNSTREAM_IFINDEX2 = 1004;
+ private static final int UPSTREAM_IFINDEX2 = 1003;
+ private static final int DOWNSTREAM_IFINDEX = 2001;
+ private static final int DOWNSTREAM_IFINDEX2 = 2002;
private static final String UPSTREAM_IFACE = "rmnet0";
private static final String UPSTREAM_IFACE2 = "wlan0";
@@ -2108,7 +2108,7 @@
@Test
public void testIpv6ForwardingRuleToString() throws Exception {
final Ipv6ForwardingRule rule = buildTestForwardingRule(UPSTREAM_IFINDEX, NEIGH_A, MAC_A);
- assertEquals("upstreamIfindex: 1001, downstreamIfindex: 1003, address: 2001:db8::1, "
+ assertEquals("upstreamIfindex: 1001, downstreamIfindex: 2001, address: 2001:db8::1, "
+ "srcMac: 12:34:56:78:90:ab, dstMac: 00:00:00:00:00:0a", rule.toString());
}
diff --git a/bpf_progs/netd.c b/bpf_progs/netd.c
index 3eb4e02..b0246f6 100644
--- a/bpf_progs/netd.c
+++ b/bpf_progs/netd.c
@@ -194,19 +194,38 @@
DEFINE_UPDATE_STATS(stats_map_B, StatsKey)
// both of these return 0 on success or -EFAULT on failure (and zero out the buffer)
-static __always_inline inline int bpf_skb_load_bytes_net(const struct __sk_buff* skb, int off,
- void* to, int len, bool is_4_19) {
- return is_4_19
- ? bpf_skb_load_bytes_relative(skb, off, to, len, BPF_HDR_START_NET)
- : bpf_skb_load_bytes(skb, off, to, len);
+static __always_inline inline int bpf_skb_load_bytes_net(const struct __sk_buff* const skb,
+ const int L3_off,
+ void* const to,
+ const int len,
+ const unsigned kver) {
+ // 'kver' (here and throughout) is the compile time guaranteed minimum kernel version,
+ // ie. we're building (a version of) the bpf program for kver (or newer!) kernels.
+ //
+ // 4.19+ kernels support the 'bpf_skb_load_bytes_relative()' bpf helper function,
+ // so we can use it. On pre-4.19 kernels we cannot use the relative load helper,
+ // and thus will simply get things wrong if there's any L2 (ethernet) header in the skb.
+ //
+ // Luckily, for cellular traffic, there likely isn't any, as cell is usually 'rawip'.
+ //
+ // However, this does mean that wifi (and ethernet) on 4.14 is basically a lost cause:
+ // we'll be making decisions based on the *wrong* bytes (fetched from the wrong offset),
+ // because the 'L3_off' passed to bpf_skb_load_bytes() should be increased by l2_header_size,
+ // which for ethernet is 14 and not 0 like it is for rawip.
+ //
+ // For similar reasons this will fail with non-offloaded VLAN tags on < 4.19 kernels,
+ // since those extend the ethernet header from 14 to 18 bytes.
+ return kver >= KVER(4, 19, 0)
+ ? bpf_skb_load_bytes_relative(skb, L3_off, to, len, BPF_HDR_START_NET)
+ : bpf_skb_load_bytes(skb, L3_off, to, len);
}
-static __always_inline inline bool skip_owner_match(struct __sk_buff* skb, bool is_4_19) {
+static __always_inline inline bool skip_owner_match(struct __sk_buff* skb, const unsigned kver) {
uint32_t flag = 0;
if (skb->protocol == htons(ETH_P_IP)) {
uint8_t proto;
// no need to check for success, proto will be zeroed if bpf_skb_load_bytes_net() fails
- (void)bpf_skb_load_bytes_net(skb, IP_PROTO_OFF, &proto, sizeof(proto), is_4_19);
+ (void)bpf_skb_load_bytes_net(skb, IP_PROTO_OFF, &proto, sizeof(proto), kver);
if (proto == IPPROTO_ESP) return true;
if (proto != IPPROTO_TCP) return false; // handles read failure above
uint8_t ihl;
@@ -215,19 +234,19 @@
// (a little bit deeper in the packet in spite of ihl being zeroed) of the tcp flags
// field will also fail, and that failure we already handle correctly
// (we also don't check that ihl in [0x45,0x4F] nor that ipv4 header checksum is correct)
- (void)bpf_skb_load_bytes_net(skb, IPPROTO_IHL_OFF, &ihl, sizeof(ihl), is_4_19);
+ (void)bpf_skb_load_bytes_net(skb, IPPROTO_IHL_OFF, &ihl, sizeof(ihl), kver);
// if the read below fails, we'll just assume no TCP flags are set, which is fine.
(void)bpf_skb_load_bytes_net(skb, (ihl & 0xF) * 4 + TCP_FLAG32_OFF,
- &flag, sizeof(flag), is_4_19);
+ &flag, sizeof(flag), kver);
} else if (skb->protocol == htons(ETH_P_IPV6)) {
uint8_t proto;
// no need to check for success, proto will be zeroed if bpf_skb_load_bytes_net() fails
- (void)bpf_skb_load_bytes_net(skb, IPV6_PROTO_OFF, &proto, sizeof(proto), is_4_19);
+ (void)bpf_skb_load_bytes_net(skb, IPV6_PROTO_OFF, &proto, sizeof(proto), kver);
if (proto == IPPROTO_ESP) return true;
if (proto != IPPROTO_TCP) return false; // handles read failure above
// if the read below fails, we'll just assume no TCP flags are set, which is fine.
(void)bpf_skb_load_bytes_net(skb, sizeof(struct ipv6hdr) + TCP_FLAG32_OFF,
- &flag, sizeof(flag), is_4_19);
+ &flag, sizeof(flag), kver);
} else {
return false;
}
@@ -250,8 +269,8 @@
#define DROP_IF_UNSET (DOZABLE_MATCH | POWERSAVE_MATCH | RESTRICTED_MATCH | LOW_POWER_STANDBY_MATCH)
static __always_inline inline int bpf_owner_match(struct __sk_buff* skb, uint32_t uid,
- bool egress, bool is_4_19) {
- if (skip_owner_match(skb, is_4_19)) return PASS;
+ bool egress, const unsigned kver) {
+ if (skip_owner_match(skb, kver)) return PASS;
if (is_system_uid(uid)) return PASS;
@@ -288,13 +307,13 @@
StatsKey* key, uint32_t selectedMap) {
if (selectedMap == SELECT_MAP_A) {
update_stats_map_A(skb, egress, key);
- } else if (selectedMap == SELECT_MAP_B) {
+ } else {
update_stats_map_B(skb, egress, key);
}
}
static __always_inline inline int bpf_traffic_account(struct __sk_buff* skb, bool egress,
- bool is_4_19) {
+ const unsigned kver) {
uint32_t sock_uid = bpf_get_socket_uid(skb);
uint64_t cookie = bpf_get_socket_cookie(skb);
UidTagValue* utag = bpf_cookie_tag_map_lookup_elem(&cookie);
@@ -314,7 +333,7 @@
return PASS;
}
- int match = bpf_owner_match(skb, sock_uid, egress, is_4_19);
+ int match = bpf_owner_match(skb, sock_uid, egress, kver);
if (egress && (match == DROP)) {
// If an outbound packet is going to be dropped, we do not count that
// traffic.
@@ -362,25 +381,25 @@
DEFINE_NETD_BPF_PROG_KVER_RANGE("cgroupskb/ingress/stats$4_19", AID_ROOT, AID_SYSTEM,
bpf_cgroup_ingress_4_19, KVER(4, 19, 0), KVER_INF)
(struct __sk_buff* skb) {
- return bpf_traffic_account(skb, INGRESS, /* is_4_19 */ true);
+ return bpf_traffic_account(skb, INGRESS, KVER(4, 19, 0));
}
DEFINE_NETD_BPF_PROG_KVER_RANGE("cgroupskb/ingress/stats$4_14", AID_ROOT, AID_SYSTEM,
bpf_cgroup_ingress_4_14, KVER_NONE, KVER(4, 19, 0))
(struct __sk_buff* skb) {
- return bpf_traffic_account(skb, INGRESS, /* is_4_19 */ false);
+ return bpf_traffic_account(skb, INGRESS, KVER_NONE);
}
DEFINE_NETD_BPF_PROG_KVER_RANGE("cgroupskb/egress/stats$4_19", AID_ROOT, AID_SYSTEM,
bpf_cgroup_egress_4_19, KVER(4, 19, 0), KVER_INF)
(struct __sk_buff* skb) {
- return bpf_traffic_account(skb, EGRESS, /* is_4_19 */ true);
+ return bpf_traffic_account(skb, EGRESS, KVER(4, 19, 0));
}
DEFINE_NETD_BPF_PROG_KVER_RANGE("cgroupskb/egress/stats$4_14", AID_ROOT, AID_SYSTEM,
bpf_cgroup_egress_4_14, KVER_NONE, KVER(4, 19, 0))
(struct __sk_buff* skb) {
- return bpf_traffic_account(skb, EGRESS, /* is_4_19 */ false);
+ return bpf_traffic_account(skb, EGRESS, KVER_NONE);
}
// WARNING: Android T's non-updatable netd depends on the name of this program.
diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp
index 917da93..2e53118 100644
--- a/tools/gn2bp/Android.bp.swp
+++ b/tools/gn2bp/Android.bp.swp
@@ -14,6 +14,58 @@
//
// This file is automatically generated by gen_android_bp. Do not edit.
+// GN: //components/cronet/android:cronet_api_java
+java_library {
+ name: "cronet_aml_api_java",
+ srcs: [
+ ":cronet_aml_api_sources",
+ ],
+ libs: [
+ "androidx.annotation_annotation",
+ ],
+ sdk_version: "module_current",
+}
+
+// GN: //components/cronet/android:cronet_api_java
+filegroup {
+ name: "cronet_aml_api_sources",
+ srcs: [
+ ":cronet_aml_components_cronet_android_interface_api_version",
+ "components/cronet/android/api/src/org/chromium/net/BidirectionalStream.java",
+ "components/cronet/android/api/src/org/chromium/net/CallbackException.java",
+ "components/cronet/android/api/src/org/chromium/net/CronetEngine.java",
+ "components/cronet/android/api/src/org/chromium/net/CronetException.java",
+ "components/cronet/android/api/src/org/chromium/net/CronetProvider.java",
+ "components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
+ "components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java",
+ "components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java",
+ "components/cronet/android/api/src/org/chromium/net/ICronetEngineBuilder.java",
+ "components/cronet/android/api/src/org/chromium/net/InlineExecutionProhibitedException.java",
+ "components/cronet/android/api/src/org/chromium/net/NetworkException.java",
+ "components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java",
+ "components/cronet/android/api/src/org/chromium/net/NetworkQualityThroughputListener.java",
+ "components/cronet/android/api/src/org/chromium/net/QuicException.java",
+ "components/cronet/android/api/src/org/chromium/net/RequestFinishedInfo.java",
+ "components/cronet/android/api/src/org/chromium/net/UploadDataProvider.java",
+ "components/cronet/android/api/src/org/chromium/net/UploadDataProviders.java",
+ "components/cronet/android/api/src/org/chromium/net/UploadDataSink.java",
+ "components/cronet/android/api/src/org/chromium/net/UrlRequest.java",
+ "components/cronet/android/api/src/org/chromium/net/UrlResponseInfo.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetResponse.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandler.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
+ "components/cronet/android/api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
+ ],
+}
+
// GN: //base/allocator:buildflags
cc_genrule {
name: "cronet_aml_base_allocator_buildflags",
@@ -2731,38 +2783,6 @@
"build/android/java/src/org/chromium/build/annotations/MainDex.java",
"build/android/java/src/org/chromium/build/annotations/MockedInTests.java",
"build/android/java/src/org/chromium/build/annotations/UsedByReflection.java",
- "components/cronet/android/api/src/org/chromium/net/BidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/CallbackException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/CronetException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetProvider.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/ICronetEngineBuilder.java",
- "components/cronet/android/api/src/org/chromium/net/InlineExecutionProhibitedException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityThroughputListener.java",
- "components/cronet/android/api/src/org/chromium/net/QuicException.java",
- "components/cronet/android/api/src/org/chromium/net/RequestFinishedInfo.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProvider.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataSink.java",
- "components/cronet/android/api/src/org/chromium/net/UrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/UrlResponseInfo.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetResponse.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandler.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
"components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
"components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
"components/cronet/android/java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
@@ -3037,38 +3057,6 @@
"build/android/java/src/org/chromium/build/annotations/MainDex.java",
"build/android/java/src/org/chromium/build/annotations/MockedInTests.java",
"build/android/java/src/org/chromium/build/annotations/UsedByReflection.java",
- "components/cronet/android/api/src/org/chromium/net/BidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/CallbackException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/CronetException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetProvider.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/ICronetEngineBuilder.java",
- "components/cronet/android/api/src/org/chromium/net/InlineExecutionProhibitedException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityThroughputListener.java",
- "components/cronet/android/api/src/org/chromium/net/QuicException.java",
- "components/cronet/android/api/src/org/chromium/net/RequestFinishedInfo.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProvider.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataSink.java",
- "components/cronet/android/api/src/org/chromium/net/UrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/UrlResponseInfo.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetResponse.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandler.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
"components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
"components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
"components/cronet/android/java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
@@ -4391,9 +4379,11 @@
min_sdk_version: "29",
target: {
android: {
+ shared_libs: [
+ "libmediandk",
+ ],
header_libs: [
"jni_headers",
- "media_ndk_headers",
],
},
host: {
@@ -4639,38 +4629,6 @@
"build/android/java/src/org/chromium/build/annotations/MainDex.java",
"build/android/java/src/org/chromium/build/annotations/MockedInTests.java",
"build/android/java/src/org/chromium/build/annotations/UsedByReflection.java",
- "components/cronet/android/api/src/org/chromium/net/BidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/CallbackException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/CronetException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetProvider.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/ICronetEngineBuilder.java",
- "components/cronet/android/api/src/org/chromium/net/InlineExecutionProhibitedException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityThroughputListener.java",
- "components/cronet/android/api/src/org/chromium/net/QuicException.java",
- "components/cronet/android/api/src/org/chromium/net/RequestFinishedInfo.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProvider.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataSink.java",
- "components/cronet/android/api/src/org/chromium/net/UrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/UrlResponseInfo.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetResponse.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandler.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
"components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
"components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
"components/cronet/android/java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
@@ -4749,6 +4707,7 @@
"androidx.annotation_annotation-experimental-nodeps",
"androidx.collection_collection",
"androidx.core_core-nodeps",
+ "cronet_aml_api_java",
"framework-connectivity-t.stubs.module_lib",
"framework-connectivity.stubs.module_lib",
"framework-mediaprovider.stubs.module_lib",
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index d1d1d1c..8a3c38b 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -213,6 +213,9 @@
# Name of tethering apex module
tethering_apex = "com.android.tethering"
+# Name of cronet api target
+java_api_target_name = "//components/cronet/android:cronet_api_java"
+
# ----------------------------------------------------------------------------
# End of configuration.
# ----------------------------------------------------------------------------
@@ -1476,10 +1479,36 @@
blueprint.add_module(module)
return module
+def get_java_sources(gn, predicate):
+ java_sources = set()
+ for target_name, sources in gn.java_sources.items():
+ if predicate(target_name):
+ java_sources.update(sources)
+ return java_sources
+
+def get_java_actions(gn, predicate):
+ java_actions = set()
+ for target_name, actions in gn.java_actions.items():
+ if predicate(target_name):
+ java_actions.update(actions)
+ return java_actions
+
+def get_non_api_java_sources(gn):
+ return get_java_sources(gn, lambda name: name != java_api_target_name)
+
+def get_non_api_java_actions(gn):
+ return get_java_actions(gn, lambda name: name != java_api_target_name)
+
+def get_api_java_sources(gn):
+ return get_java_sources(gn, lambda name: name == java_api_target_name)
+
+def get_api_java_actions(gn):
+ return get_java_actions(gn, lambda name: name == java_api_target_name)
+
def create_java_module(blueprint, gn):
bp_module_name = module_prefix + 'java'
module = Module('java_library', bp_module_name, '//gn:java')
- module.srcs.update([gn_utils.label_to_path(source) for source in gn.java_sources])
+ module.srcs.update([gn_utils.label_to_path(source) for source in get_non_api_java_sources(gn)])
module.libs = {
"androidx.annotation_annotation",
"jsr305",
@@ -1505,7 +1534,7 @@
module.javacflags.add("-Aorg.chromium.chrome.skipGenJni")
# TODO: remove following workaround required to make this module visible to make (b/203203405)
module.apex_available.add("//apex_available:platform")
- for dep in gn.java_actions:
+ for dep in get_non_api_java_actions(gn):
target = gn.get_target(dep)
if target.script == '//build/android/gyp/gcc_preprocess.py':
module.srcs.add(':' + create_gcc_preprocess_modules(blueprint, target).name)
@@ -1514,11 +1543,30 @@
preprocessor_module = create_java_jni_preprocessor(blueprint)
module.plugins.add(preprocessor_module.name)
blueprint.add_module(module)
+ return module
+
+def create_java_api_module(blueprint, gn):
+ source_module = Module('filegroup', module_prefix + 'api_sources', java_api_target_name)
+ source_module.srcs.update([gn_utils.label_to_path(source)
+ for source in get_api_java_sources(gn)])
+ source_module.srcs.update([
+ ':' + create_action_module(blueprint, gn.get_target(dep), 'java_genrule').name
+ for dep in get_api_java_actions(gn)])
+ blueprint.add_module(source_module)
+
+ java_module = Module('java_library', module_prefix + 'api_java', java_api_target_name)
+ java_module.srcs.add(":" + source_module.name)
+ java_module.sdk_version = "module_current"
+ java_module.libs = {
+ "androidx.annotation_annotation",
+ }
+ blueprint.add_module(java_module)
+ return java_module
def update_jni_registration_module(module, gn):
# TODO: java_sources might not contain all the required java files
module.srcs.update([gn_utils.label_to_path(source)
- for source in gn.java_sources
+ for source in get_non_api_java_sources(gn)
if source.endswith('.java')])
def create_blueprint_for_targets(gn, targets):
@@ -1547,9 +1595,11 @@
# Chromium builds do not add a dependency for headers found inside the
# sysroot, so they are added globally via defaults.
defaults.target['android'].header_libs = [
- 'media_ndk_headers',
'jni_headers',
]
+ defaults.target['android'].shared_libs = [
+ 'libmediandk'
+ ]
defaults.target['host'].cflags = [
# -DANDROID is added by default but target.defines contain -DANDROID if
# it's required. So adding -UANDROID to cancel default -DANDROID if it's
@@ -1566,7 +1616,9 @@
for target in targets:
create_modules_from_target(blueprint, gn, target)
- create_java_module(blueprint, gn)
+ java_api_module = create_java_api_module(blueprint, gn)
+ java_module = create_java_module(blueprint, gn)
+ java_module.libs.add(java_api_module.name)
for module in blueprint.modules.values():
if 'cronet_jni_registration' in module.name:
update_jni_registration_module(module, gn)
diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py
index 9d732e5..fa624b1 100644
--- a/tools/gn2bp/gn_utils.py
+++ b/tools/gn2bp/gn_utils.py
@@ -20,6 +20,7 @@
import logging as log
import os
import re
+import collections
BUILDFLAGS_TARGET = '//gn:gen_buildflags'
GEN_VERSION_TARGET = '//src/base:version_gen_h'
@@ -260,8 +261,8 @@
self.source_sets = {}
self.actions = {}
self.proto_libs = {}
- self.java_sources = set()
- self.java_actions = set()
+ self.java_sources = collections.defaultdict(set)
+ self.java_actions = collections.defaultdict(set)
def _get_response_file_contents(self, action_desc):
# response_file_contents are formatted as:
@@ -307,7 +308,7 @@
return self.all_targets[label_without_toolchain(gn_target_name)]
- def parse_gn_desc(self, gn_desc, gn_target_name, is_java_target = False):
+ def parse_gn_desc(self, gn_desc, gn_target_name, java_group_name=None):
"""Parses a gn desc tree and resolves all target dependencies.
It bubbles up variables from source_set dependencies as described in the
@@ -320,7 +321,8 @@
type_ = desc['type']
arch = self._get_arch(desc['toolchain'])
- is_java_target |= self._is_java_group(type_, target_name)
+ if self._is_java_group(type_, target_name):
+ java_group_name = target_name
target = self.all_targets.get(target_name)
if target is None:
@@ -399,7 +401,7 @@
# Recurse in dependencies.
for gn_dep_name in desc.get('deps', []):
- dep = self.parse_gn_desc(gn_desc, gn_dep_name, is_java_target)
+ dep = self.parse_gn_desc(gn_desc, gn_dep_name, java_group_name)
if dep.type == 'proto_library':
target.proto_deps.add(dep.name)
target.transitive_proto_deps.add(dep.name)
@@ -447,15 +449,15 @@
if dep.name.endswith('__compile_java'):
log.debug('Adding java sources for %s', dep.name)
java_srcs = [src for src in dep.inputs if _is_java_source(src)]
- self.java_sources.update(java_srcs)
+ self.java_sources[java_group_name].update(java_srcs)
if dep.type in ["action"] and target.type == "java_group":
# //base:base_java_aidl generates srcjar from .aidl files. But java_library in soong can
# directly have .aidl files in srcs. So adding .aidl files to the java_sources.
# TODO: Find a better way/place to do this.
if dep.name == '//base:base_java_aidl':
- self.java_sources.update(dep.arch[arch].sources)
+ self.java_sources[java_group_name].update(dep.arch[arch].sources)
else:
- self.java_actions.add(dep.name)
+ self.java_actions[java_group_name].add(dep.name)
return target
def get_proto_exports(self, proto_desc):