Open mio-19 opened 3 months ago
20:55:56.584 29971 29971 I LSPosed-Bridge: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setEnabled(boolean)' on a null object reference
03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at xyz.cirno.pseudodcdimming.SettingsActivity$SettingsFragment.onResume(SettingsActivity.java:243)
03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.Fragment.performResume(Fragment.java:2556)
03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1346) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1581) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1642) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3052) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3014) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.FragmentController.dispatchResume(FragmentController.java:207) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.Activity.performResume(Activity.java:9158) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5399) 03-31 20:55:56.584 29971 29971 I LSPosed-Bridge: ... 13 more 03-31 20:55:56.584 29971 29971 E AndroidRuntime: FATAL EXCEPTION: main 03-31 20:55:56.584 29971 29971 E AndroidRuntime: Process: xyz.cirno.pseudodcdimming, PID: 29971 03-31 20:55:56.584 29971 29971 E AndroidRuntime: java.lang.RuntimeException: Unable to resume activity {xyz.cirno.pseudodcdimming/xyz.cirno.pseudodcdimming.SettingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setEnabled(boolean)' on a null object reference
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5427) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5508)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:57)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:180)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:230) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.os.Looper.loop(Looper.java:319) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8919)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setEnabled(boolean)' on a null object reference 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at xyz.cirno.pseudodcdimming.SettingsActivity$SettingsFragment.onResume(SettingsActivity.java:243)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.Fragment.performResume(Fragment.java:2556) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1346)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1581)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1642)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3052)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3014)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.FragmentController.dispatchResume(FragmentController.java:207) 03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.Activity.performResume(Activity.java:9158)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5399)
03-31 20:55:56.584 29971 29971 E AndroidRuntime: ... 13 more 03-31 20:55:56.585 2594 7949 I am_crash: [29971,0,xyz.cirno.pseudodcdimming,550026820,java.lang.NullPointerException,Attempt to invoke virtual method 'void android.preference.Preference.setEnabled(boolean)' on a null object reference,SettingsActivity.java,243,0] 03-31 20:55:56.586 2594 29996 I DropBoxManagerService: add tag=data_app_crash isTagEnabled=true flags=0x2
03-31 20:55:56.586 2594 7949 D Debug : low && ship && 3rdparty app crash, do not dump
03-31 20:55:56.586 2594 29997 W ActivityManager: crash : xyz.cirno.pseudodcdimming,10386 03-31 20:55:56.586 2594 7949 W ActivityTaskManager: Force finishing activity xyz.cirno.pseudodcdimming/.SettingsActivity 03-31 20:55:56.586 2594 7949 V Transition: allReady query: used=true, override=false, defer=0, states=Display{#0 state=ON size=1440x3088 ROTATION_0}:false 03-31 20:55:56.587 2594 7949 I wm_finish_activity: [0,102163533,344,xyz.cirno.pseudodcdimming/.SettingsActivity,force-crash]
maybe related to this commit? https://github.com/dantmnf/PseudoDCDimming/commit/8de6c9b1e69d36293842980bce450644e0b31bcf
我在https://github.com/dantmnf/PseudoDCDimming/commit/3ed2bdf812a1a3acc131edf1eedb02c3daa5bf24 上revert了https://github.com/dantmnf/PseudoDCDimming/commit/8de6c9b1e69d36293842980bce450644e0b31bcf 现在至少可以跑起来
真實的錯誤在這裡
[ 2024-04-01T14:02:46.477 1000: 2584: 2584 E/LSPosed-Bridge ] java.lang.NoSuchMethodError: com.android.server.display.LocalDisplayAdapter$BacklightAdapter#setBacklight(float,float,float,float)#exact
at de.robv.android.xposed.XposedHelpers.lambda$findMethodExact$3(Unknown Source:6)
at de.robv.android.xposed.XposedHelpers.h(Unknown Source:0)
at de.robv.android.xposed.c.get(Unknown Source:13)
at java.util.Optional.orElseThrow(Optional.java:404)
at de.robv.android.xposed.XposedHelpers.findMethodExact(SourceFile:1)
at xyz.cirno.pseudodcdimming.xposed.XposedInit.handleLoadSystemServer(XposedInit.java:50)
at xyz.cirno.pseudodcdimming.xposed.XposedInit.handleLoadPackage(XposedInit.java:31)
at de.robv.android.xposed.IXposedHookLoadPackage$Wrapper.handleLoadPackage(Unknown Source:2)
at de.robv.android.xposed.callbacks.XC_LoadPackage.call(Unknown Source:6)
at de.robv.android.xposed.callbacks.XCallback.callAll(Unknown Source:26)
at H0.a(Unknown Source:30)
at java.lang.reflect.Method.invoke(Native Method)
at J.callback(Unknown Source:123)
at LSPHooker_.startBootstrapServices(Unknown Source:11)
at com.android.server.SystemServer.run(SystemServer.java:1292)
at com.android.server.SystemServer.main(SystemServer.java:1007)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
decompiled code:
public void setBacklight(float f, float f2, float f3, float f4, int i, int i2) {
float f5 = f;
float f6 = f3;
int i3 = i;
int i4 = i2;
if (!this.mUseSurfaceControlBrightness && !this.mForceSurfaceControl) {
LogicalLight logicalLight = this.mBacklight;
if (logicalLight != null) {
logicalLight.setBrightness(f6);
}
} else if (BrightnessSynchronizer.floatEquals(f, Float.NaN)) {
this.mSurfaceControlProxy.setDisplayBrightness(this.mDisplayToken, f6);
} else {
Slog.d("LocalDisplayAdapter", "surface lcd : " + PowerManagerUtil.brightnessToString(i3, f6) + ", " + PowerManagerUtil.brightnessToString(i4, f) + ", " + PowerManagerUtil.displayTypeToString(this.mIsFirstDisplay) + " +");
this.mSurfaceControlProxy.setDisplayBrightness(this.mDisplayToken, f, f2, f3, f4);
Slog.d("LocalDisplayAdapter", "surface lcd : " + PowerManagerUtil.brightnessToString(i3, f6) + ", " + PowerManagerUtil.brightnessToString(i4, f) + ", " + PowerManagerUtil.displayTypeToString(this.mIsFirstDisplay) + " -");
}
}
LocalDisplayAdapter$LocalDisplayDevice$1
public final void setDisplayBrightness(final float n, final float n2) {
if (!Float.isNaN(n)) {
if (!Float.isNaN(n2)) {
LocalDisplayAdapter$LocalDisplayDevice.-$$Nest$fputmLastBrightnessRequestedTime(this.this$1, SystemClock.uptimeMillis());
final StringBuilder sb = new StringBuilder();
sb.append("setDisplayBrightness(id=");
sb.append(this.val$physicalDisplayId);
sb.append(", brightnessState=");
sb.append(n);
sb.append(", sdrBrightnessState=");
sb.append(n2);
sb.append(")");
Trace.traceBegin(131072L, sb.toString());
try {
final float brightnessToBacklight = this.brightnessToBacklight(n);
final float brightnessToBacklight2 = this.brightnessToBacklight(n2);
final float backlightToNits = this.backlightToNits(brightnessToBacklight);
final float backlightToNits2 = this.backlightToNits(brightnessToBacklight2);
LocalDisplayAdapter$LocalDisplayDevice.-$$Nest$fgetmBacklightAdapter(this.this$1).setBacklight(brightnessToBacklight2, backlightToNits2, brightnessToBacklight, backlightToNits, BrightnessSynchronizer.brightnessFloatToInt(n), BrightnessSynchronizer.brightnessFloatToInt(n2));
Trace.traceCounter(131072L, "ScreenBrightness", BrightnessSynchronizer.brightnessFloatToInt(n));
Trace.traceCounter(131072L, "SdrScreenBrightness", BrightnessSynchronizer.brightnessFloatToInt(n2));
if (this.this$1.getDisplayDeviceConfig().hasSdrToHdrRatioSpline()) {
this.handleHdrSdrNitsChanged(backlightToNits, backlightToNits2);
}
}
finally {
Trace.traceEnd(131072L);
}
}
}
}
classes.zip Github is limiting max file size. This archive contains classes.dex classes2.dex classes3.dex
public static String brightnessToString(int i, float f) {
return String.format(Locale.US, "%d(%.3f)", new Object[]{Integer.valueOf(i), Float.valueOf(f)});
}
Since the added two parameters are not really used, 我试试填两个0
另一个method
[ 2024-04-01T15:28:24.533 1000: 2270: 2270 E/LSPosed-Bridge ] java.lang.NoSuchMethodError: com.android.server.display.LocalDisplayAdapter$BacklightAdapter(android.os.IBinder,boolean,com.android.server.display.LocalDisplayAdapter$SurfaceControlProxy)#exact
at de.robv.android.xposed.XposedHelpers.lambda$findConstructorExact$7(Unknown Source:6)
at de.robv.android.xposed.XposedHelpers.i(Unknown Source:0)
at de.robv.android.xposed.b.get(Unknown Source:10)
at java.util.Optional.orElseThrow(Optional.java:404)
at de.robv.android.xposed.XposedHelpers.findConstructorExact(SourceFile:1)
at de.robv.android.xposed.XposedHelpers.findAndHookConstructor(SourceFile:1)
at xyz.cirno.pseudodcdimming.xposed.XposedInit.handleLoadSystemServer(XposedInit.java:79)
at xyz.cirno.pseudodcdimming.xposed.XposedInit.handleLoadPackage(XposedInit.java:31)
at de.robv.android.xposed.IXposedHookLoadPackage$Wrapper.handleLoadPackage(Unknown Source:2)
at de.robv.android.xposed.callbacks.XC_LoadPackage.call(Unknown Source:6)
at de.robv.android.xposed.callbacks.XCallback.callAll(Unknown Source:26)
at H0.a(Unknown Source:30)
at java.lang.reflect.Method.invoke(Native Method)
at J.callback(Unknown Source:123)
at LSPHooker_.startBootstrapServices(Unknown Source:11)
at com.android.server.SystemServer.run(SystemServer.java:1292)
at com.android.server.SystemServer.main(SystemServer.java:1007)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
contructor多了一个参数
public class BacklightAdapter {
public final LogicalLight mBacklight;
public final IBinder mDisplayToken;
public boolean mForceSurfaceControl = false;
public final boolean mIsFirstDisplay;
public final SurfaceControlProxy mSurfaceControlProxy;
public final boolean mUseSurfaceControlBrightness;
public BacklightAdapter(IBinder iBinder, boolean z, SurfaceControlProxy surfaceControlProxy, long j) {
this.mDisplayToken = iBinder;
this.mSurfaceControlProxy = surfaceControlProxy;
boolean displayBrightnessSupport = surfaceControlProxy.getDisplayBrightnessSupport(iBinder);
this.mUseSurfaceControlBrightness = displayBrightnessSupport;
this.mIsFirstDisplay = z;
SurfaceControl.StaticDisplayInfo staticDisplayInfo = surfaceControlProxy.getStaticDisplayInfo(j);
boolean z2 = staticDisplayInfo != null && staticDisplayInfo.isInternal;
Class<LightsManager> cls = LightsManager.class;
if (!displayBrightnessSupport && z) {
this.mBacklight = ((LightsManager) LocalServices.getService(cls)).getLight(0);
} else if (displayBrightnessSupport || !z2) {
this.mBacklight = null;
} else {
this.mBacklight = ((LightsManager) LocalServices.getService(cls)).getLight(9);
}
}
public void setBacklight(float f, float f2, float f3, float f4, int i, int i2) {
float f5 = f;
float f6 = f3;
int i3 = i;
int i4 = i2;
if (!this.mUseSurfaceControlBrightness && !this.mForceSurfaceControl) {
LogicalLight logicalLight = this.mBacklight;
if (logicalLight != null) {
logicalLight.setBrightness(f6);
}
} else if (BrightnessSynchronizer.floatEquals(f, Float.NaN)) {
this.mSurfaceControlProxy.setDisplayBrightness(this.mDisplayToken, f6);
} else {
Slog.d("LocalDisplayAdapter", "surface lcd : " + PowerManagerUtil.brightnessToString(i3, f6) + ", " + PowerManagerUtil.brightnessToString(i4, f) + ", " + PowerManagerUtil.displayTypeToString(this.mIsFirstDisplay) + " +");
this.mSurfaceControlProxy.setDisplayBrightness(this.mDisplayToken, f, f2, f3, f4);
Slog.d("LocalDisplayAdapter", "surface lcd : " + PowerManagerUtil.brightnessToString(i3, f6) + ", " + PowerManagerUtil.brightnessToString(i4, f) + ", " + PowerManagerUtil.displayTypeToString(this.mIsFirstDisplay) + " -");
}
}
public void setForceSurfaceControl(boolean z) {
this.mForceSurfaceControl = z;
}
public String toString() {
return "BacklightAdapter [useSurfaceControl=" + this.mUseSurfaceControlBrightness + " (force_anyway? " + this.mForceSurfaceControl + "), backlight=" + this.mBacklight + "]";
}
}
好,没救了()
好,没救了()
救成功了
加上long.class以后可以进设置界面了
看起来工作正常 还得拿一个能调曝光时间的设备验证一下
diff --git a/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/BacklightAdapterProxy.java b/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/BacklightAdapterProxy.java
index 445f014..ff5feeb 100644
--- a/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/BacklightAdapterProxy.java
+++ b/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/BacklightAdapterProxy.java
@@ -13,7 +13,7 @@ public class BacklightAdapterProxy {
public void setBacklight(float sdrBacklight, float sdrNits, float backlight, float nits) {
try {
- setBacklightMethod.invoke(adapter, sdrBacklight, sdrNits, backlight, nits);
+ setBacklightMethod.invoke(adapter, sdrBacklight, sdrNits, backlight, nits, 0, 0);^M
} catch (Exception e) {
// ignore
}
diff --git a/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/XposedInit.java b/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/XposedInit.java
index dc81c10..266f71a 100644
--- a/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/XposedInit.java
+++ b/app/src/main/java/xyz/cirno/pseudodcdimming/xposed/XposedInit.java
@@ -53,7 +53,8 @@ public class XposedInit implements IXposedHookLoadPackage {
float.class, // sdrBacklight
float.class, // sdrNits
float.class, // backlight
- float.class // nits
+ float.class, // nits^M
+ int.class, int.class^M
);
XposedHelpers.findAndHookConstructor(localDisplayDevice,
@@ -79,6 +80,7 @@ public class XposedInit implements IXposedHookLoadPackage {
IBinder.class,
boolean.class,
XposedHelpers.findClass("com.android.server.display.LocalDisplayAdapter$SurfaceControlProxy", classLoader),
+ long.class,^M
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
@@ -109,6 +111,8 @@ public class XposedInit implements IXposedHookLoadPackage {
final var requestSdrNits = (float)param.args[1];
final var requestBacklight = (float)param.args[2];
final var requestNits = (float)param.args[3];
+ final var v5 = (int)param.args[4];^M
+ final var v6 = (int)param.args[5];^M
var request = new BacklightRequest(requestSdrBacklight, requestSdrNits, requestBacklight, requestNits);
可以用,开启Samsung Dex时有bug,如果要加进主线还得有一个机型判断
佬能分享下你修改后的apk嘛,我想在我的5.1.1上试试。没搞过java开发自己编译还要学半天(对不起我是懒狗QAQ)
佬能分享下你修改后的apk嘛,我想在我的5.1.1上试试。没搞过java开发自己编译还要学半天(对不起我是懒狗QAQ)
我记得另一个手机OneUI5.1的时候不是这样的 估计可能用不了
我5.1能用,5.1.1不能。
我5.1能用,5.1.1不能。
谢谢你,可惜的是确实5.1.1上用不了