rk3562 android 14 延长开机动画规避fallbackhome黑屏

Android 的设备无论哪个版本从开机到快进入桌面时候都会有一个加载过程,如果是没有锁屏的像一些box产品或者用Android做的非手机平板的设备为了体验更好一点,都会去掉中间的加载过程,其实就是原生设置的fallbackhome,如果是第一次开机还有一个引导的界面的过程,这个rom直接去掉该apk就好,但是引导完成的属性要在其他地方补充上,不然会出现可能会开发者模式打不开或者usb调试开不了。这里主要是举例如何去掉fallbackhome。以下是Android14 的修改:

diff –git a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
index a3f7ead40fe…e1ad7aca1d8 100755
— a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
+++ b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
@@ -374,8 +374,8 @@ public class ResolverActivity extends Activity implements
boolean firstBoot = (Settings.System.getInt(getApplication().getContentResolver(), “default_home_setting_changed”, 0) == 0);
android.util.Log.i(“sqlin”,“firstBoot is:”+firstBoot);
if(firstBoot){
+ String defPackageName = “包名”;
+ String defClassName = “启动页面”;
setDefaultLauncher(defPackageName,defClassName);
android.util.Log.i(“xwl”,”deflauncher : PackageName = “+ defPackageName+” ClassName = “+defClassName);
Intent defIntent = new Intent();
diff –git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
old mode 100644
new mode 100755
index 3e04cfee789…ea24079ec58
— a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4599,6 +4599,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
snapshot.enforceCrossUserPermission(callingUid, userId, false, false,
“checkPackageStartable”);
+ if(packageName.equals(“包名”)){
+ return;
+ }
switch (snapshot.getPackageStartability(mSafeMode, packageName, callingUid, userId)) {
case PACKAGE_STARTABILITY_NOT_FOUND:
throw new SecurityException(“Package ” + packageName + ” was not found!”);
补充 setDefaultLauncher方法:


private void setDefaultLauncher(String defPackageName,String defClassName) {
    if ((defPackageName != null && defPackageName.trim().length() > 1) && (defClassName != null && defClassName.trim().length() > 0)) {
		 Log.v(TAG, "sqlin-setDefaultLauncher--defPackageName is:"+defPackageName);
        IntentFilter filter = new IntentFilter();
      filter.addAction("android.intent.action.MAIN");
        filter.addCategory("android.intent.category.HOME");
        filter.addCategory("android.intent.category.DEFAULT");
        Intent intent=new Intent(Intent.ACTION_MAIN);
       intent.addCategory(Intent.CATEGORY_HOME);
        List<ResolveInfo> list = new ArrayList<ResolveInfo>();
        list = getPackageManager().queryIntentActivities(intent, 0);
      final int N = list.size();
        ComponentName[] set = new ComponentName[N];
        int bestMatch = 0;
        for (int i=0; i<N; i++) {
            ResolveInfo r = list.get(i);
            set[i] = new ComponentName(r.activityInfo.packageName,
                  r.activityInfo.name);
           if (r.match > bestMatch) bestMatch = r.match;
        }
        ComponentName preActivity = new ComponentName(defPackageName, defClassName);
        getPackageManager().addPreferredActivity(filter, bestMatch, set,preActivity);
    }
}

diff –git a/packages/apps/Settings/src/com/android/settings/FallbackHome.java b/packages/apps/Settings/src/com/android/settings/FallbackHome.java
old mode 100644
new mode 100755
index b70470b5318…3993a01b686
— a/packages/apps/Settings/src/com/android/settings/FallbackHome.java
+++ b/packages/apps/Settings/src/com/android/settings/FallbackHome.java
@@ -37,6 +37,9 @@ import android.util.Log;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.view.animation.AnimationUtils;
+import java.util.List;
+import java.util.ArrayList;
+import android.content.ComponentName;

import java.util.Objects;

@@ -48,8 +51,10 @@ public class FallbackHome extends Activity {
private WallpaperManager mWallManager;


 private final Runnable mProgressTimeoutRunnable = () -> {

– View v = getLayoutInflater().inflate(
– R.layout.fallback_home_finishing_boot, null /* root /);
+
+ // View v = getLayoutInflater().inflate(
+ // R.layout.fallback_home_finishing_boot, null /
root /);
+ /
*
setContentView(v);
v.setAlpha(0f);
v.animate()
@@ -58,6 +63,7 @@ public class FallbackHome extends Activity {
.setInterpolator(AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_slow_in))
.start();
+ **/
getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
};

最后在framework的监听acitivty页面启动地方添加要识别的包名:
— a/frameworks/base/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -135,6 +135,7 @@ import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONTAINERS;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS_LIGHT;
+import static com.android.internal.protolog.ProtoLogGroup.WM_ERROR;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ORIENTATION;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_STARTING_WINDOW;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_STATES;
@@ -6844,6 +6845,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (task != null) {
setTaskHasBeenVisible();
}
+
+ android.util.Log.d(“ActivityRecord”, “real home…” + shortComponentName+“;;ishome:”+isHomeIntent(intent));
+
+ if (shortComponentName != null && shortComponentName.contains(“包名”)) {
+ //android.os.SystemProperties.set(“service.bootanim.exit”, “1”);
+ android.util.Log.d(“ActivityRecord”, “real home…” + shortComponentName);
+ if (!SurfaceControl.bootFinished()) {
+ Slog.e(TAG_WM, “performEnableScreen: bootFinished() failed.”);
+ mLaunchRootTask = null;
+ return;
+ }
+ }
+
+
// Clear indicated launch root task because there’s no trampoline activity to expect after
// the windows are drawn.
mLaunchRootTask = null;
diff –git a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
index 301f61f274d…8aa9fb1dd5e 100755
— a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3799,7 +3799,7 @@ public class WindowManagerService extends IWindowManager.Stub
waitTime);
}
}

+ /**
if (!mBootAnimationStopped) {
Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, “Stop bootanim”, 0);
// stop boot animation
@@ -3818,7 +3818,7 @@ public class WindowManagerService extends IWindowManager.Stub
ProtoLog.w(WM_ERROR, “performEnableScreen: bootFinished() failed.”);
return;
}

+**/
EventLogTags.writeWmBootAnimationDone(SystemClock.uptimeMillis());
Trace.asyncTraceEnd(TRACE_TAG_WINDOW_MANAGER, “Stop bootanim”, 0);
mDisplayEnabled = true;

还有个细节就是壁纸要换成动画的最后一帧或者黑色壁纸,不然可能在启动应用没那么快的时候会闪下系统壁纸,体验也不是很好。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...