Hidden API access in lineage-sdk cause crash in BlissLauncher when compiled with API 28.
- Device model(s): Tissot Pie
Summary
After upgrading the lineage-sdk to Q and adding support for Q build, the Blisslauncher compiled with API 28 is crashing because of the non-SDK interface restriction enforced with Android 28.
The problem
Install latest api-Oreo build generated from the master branch. Steps to reproduce
What is the current behavior?
It crashes with an exception.
What is the expected correct behavior?
It should run without that exception.
Technical information
Relevant logs (adb logcat
)
2020-11-22 21:38:18.457 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/content/ContentResolver;->acquireProvider(Ljava/lang/String;)Landroid/content/IContentProvider; (light greylist, linking)
2020-11-22 21:38:18.457 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/content/ContentResolver;->getPackageName()Ljava/lang/String; (light greylist, linking)
2020-11-22 21:38:18.457 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/content/IContentProvider;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle; (light greylist, linking)
2020-11-22 21:38:18.457 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/os/BaseBundle;->getPairValue()Ljava/lang/String; (dark greylist, linking)
2020-11-22 21:38:18.457 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/content/ContentResolver;->createSqlQueryBundle(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle; (dark greylist, linking)
2020-11-22 21:38:18.458 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/os/BaseBundle;->getPairValue()Ljava/lang/String; (dark greylist, linking)
2020-11-22 21:38:18.458 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/content/ContentResolver;->createSqlQueryBundle(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle; (dark greylist, linking)
2020-11-22 21:38:18.462 18603-18838/foundation.e.blisslauncher.debug W/slauncher.debu: Accessing hidden method Landroid/os/BaseBundle;->getPairValue()Ljava/lang/String; (dark greylist, linking)
2020-11-22 21:38:18.464 18603-18838/foundation.e.blisslauncher.debug E/AndroidRuntime: FATAL EXCEPTION: weather-service-worker
Process: foundation.e.blisslauncher.debug, PID: 18603
java.lang.NoSuchMethodError: No virtual method getPairValue()Ljava/lang/String; in class Landroid/os/Bundle; or its super classes (declaration of 'android.os.Bundle' appears in /system/framework/framework.jar!classes2.dex)
at lineageos.providers.LineageSettings$NameValueCache.getStringForUser(LineageSettings.java:245)
at lineageos.providers.LineageSettings$Global.getStringForUser(LineageSettings.java:3217)
at lineageos.providers.LineageSettings$Global.getIntForUser(LineageSettings.java:3257)
at lineageos.providers.LineageSettings$Global.getInt(LineageSettings.java:3252)
at lineageos.weather.LineageWeatherManager.requestWeatherUpdate(LineageWeatherManager.java:143)
at foundation.e.blisslauncher.features.weather.WeatherUpdateService$WorkerThread.onNewWeatherRequest(WeatherUpdateService.java:287)
at foundation.e.blisslauncher.features.weather.WeatherUpdateService$WorkerThread.access$000(WeatherUpdateService.java:183)
at foundation.e.blisslauncher.features.weather.WeatherUpdateService$WorkerThread$1.handleMessage(WeatherUpdateService.java:212)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
2020-11-22 21:38:18.477 18603-18838/foundation.e.blisslauncher.debug I/Process: Sending signal. PID: 18603 SIG: 9
Relevant screenshots
Solutions
Workaround
Using adb command to disable the restriction.adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
Possible fixes
We have to modify the lineage-sdk and make appropriate changes to not depend on non-sdk interfaces.