Dear Android Building Group,
I am currently trying to extend the network security configuration to apply certificate transparency by default. Therefore I am extending the AOSP/frameworks/base/core/java/android/net/config directory.
I would also like to use some external libraries within this directory, which turned out to be a big problem for me. For a concrete example, let's say I want to use the gson library.
First I will provide my way of implementing the gson library for AOSP/frameworks/base/core/java/android/net/config (1). The provided way should be the closest to a working implementation, still, it breaks on boot. After that, I will provide a very similar implementation for using gson in AOSP/frameworks/base/services/core/java/com/android/server (2), which works fine.
Questions:
1. Why does (1) break and how can I fix it?
Specifications:
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=11
TARGET_PRODUCT=aosp_x86_64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=x86_64
TARGET_2ND_ARCH=x86
TARGET_2ND_ARCH_VARIANT=x86_64
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.19.0-10-amd64-x86_64-Debian-GNU/Linux-10-(buster)
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=RQ2A.210405.005
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera
hardware/google/camera/devices/EmulatedCamera device/generic/goldfish device/generic/goldfish-opengl
Implementation (1):
+ AOSP/prebuilts/misc/common/gson
+ Android.pb
+ gson-2.8.7.jar
AOSP/prebuilts/misc/common/gson/Android.pb
__________
+ java_import {
+ name: "gson",
+ installable: false,
+ host_supported: true,
+ jars: ["gson-2.8.7.jar"],
+ }
__________
AOSP/frameworks/base/Android.bp
__________
...
java_library {
name: "framework-minus-apex",
defaults: ["framework-defaults"],
srcs: [":framework-non-updatable-sources"],
installable: true,
javac_shard_size: 150,
required: [
"framework-platform-compat-config",
"libcore-platform-compat-config",
"services-platform-compat-config",
"documents-ui-compat-config",
],
+ libs: ["framework-updatable-stubs-module_libs_api","gson",],
...
__________
AOSP/frameworks/base/core/java/android/net/config/NetworkSecurityTrustManager.java
__________
...
import com.google.gson.Gson;
...
public void checkserverTrusted(...)...{
...
+ android.util.Log.d(TAG,"About to instantiate Gson object.");
+ Gson gson = new Gson();
+ android.util.Log.d(TAG,"Gson object has been successfully instantiated.");
...
}
...
__________
Building the source is no problem. However, running the artifacts crashes the system:
...
05-31 12:25:23.842 792 1374 D TAG: About to instantiate Gson object.
--------- beginning of crash
05-31 12:25:23.
847 792 1374 E AndroidRuntime: FATAL EXCEPTION: Thread-4
05-31 12:25:23.
847 792 1374 E AndroidRuntime: Process: com.android.networkstack.process, PID: 792
05-31 12:25:23.
847 792 1374 E AndroidRuntime: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
...
Implementation (2):
+ AOSP/prebuilts/misc/common/gson
+ Android.pb
+ gson-2.8.7.jar
AOSP/prebuilts/misc/common/gson/Android.pb
__________
+ java_import {
+ name: "gson",
+ installable: false,
+ host_supported: true,
+ jars: ["gson-2.8.7.jar"],
+ }
__________
AOSP/frameworks/base/services/core/Android.bp
__________
java_library_static {
name: "services.core.unboosted",
...
static_libs: [
+ "gson",
"time_zone_distro",
"time_zone_distro_installer",
"android.hardware.authsecret-V1.0-java",
...
__________
AOSP/frameworks/base/services/core/java/com/android/server/am/ActiveServices.java
__________
...
import com.google.gson.Gson;
...
public ActiveServices(ActivityManagerService service) {
mAm = service;
int maxBg = 0;
try {
maxBg = Integer.parseInt(SystemProperties.get("ro.config.max_starting_bg", "0"));
} catch(RuntimeException e) {
}
mMaxStartingBackground = maxBg > 0
? maxBg : ActivityManager.isLowRamDeviceStatic() ? 1 : 8;
+
+ android.util.Log.d(TAG,"About to instantiate Gson object.");
+ Gson gson = new Gson();
+ android.util.Log.d(TAG,"Gson object has been successfully instantiated.");
}
...
For (2) everything works as expected. And both logs can be observed in logcat.
Can you please help me to fix (1) or at least to understand the problem?
Thanks a lot!
Regards,
John