1. Find ActivityManagerService.java
Find the ActivityManagerService.java file in the ..\rk3229_5.1_box\frameworks\base\services\core\java\com\android\server\am directory. Find setDefaultLauncher in the startHomeActivityLocked function in the file.
boolean startHomeActivityLocked(int userId, String reason) { setDefaultLauncher(userId); if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL & amp; & amp; mTopAction == null) { // We are running in factory test mode, but unable to find // the factory test app, so just sit around displaying the // error message and don't try to start anything. return false; } Intent intent = getHomeIntent(); ActivityInfo aInfo = resolveActivityInfo(intent, STOCK_PM_FLAGS, userId); if (aInfo != null) { intent.setComponent(new ComponentName( aInfo.applicationInfo.packageName, aInfo.name)); // Don't do this if the home app is currently being // instrumented. aInfo = new ActivityInfo(aInfo); aInfo.applicationInfo = getAppInfoForUser(aInfo.applicationInfo, userId); ProcessRecord app = getProcessRecordLocked(aInfo.processName, aInfo.applicationInfo.uid, true); if (app == null || app.instrumentationClass == null) { intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); mStackSupervisor.startHomeActivity(intent, aInfo, reason); } } return true; }
2. Set the default desktop package name at startup
Set the package name of the default desktop launch at startup in setDefaultLauncher. The firmware I developed, the package name to be started is as follows:
String packageName = SystemProperties.get(“persist.sys.yz.defpackage”, “com.zhai.ads”);
String className = SystemProperties.get(“persist.sys.yz.defclass”, “com.zhai.touchhome.Loading”);
private void setDefaultLauncher(int userId) { //get default component //String packageName = SystemProperties.get("persist.sys.yz.defpackage", "com.zhaisoft.app.hesiling"); // String className = SystemProperties.get("persist.sys.yz.defclass", "com.zhaisoft.app.hesiling.activity.MainActivity"); \t\t String packageName = SystemProperties.get("persist.sys.yz.defpackage", "com.zhai.ads"); String className = SystemProperties.get("persist.sys.yz.defclass", "com.zhai.touchhome.Loading"); \t\t \t\t Slog.i(TAG, "default packageName = " + packageName + ", default className = " + className); if(!packageName.equals("no") & amp; & amp; !className.equals("no")){ boolean firstLaunch = SystemProperties.getBoolean("persist.sys.sw.firstLaunch", true); Slog.d(TAG, "firstLaunch = " + firstLaunch); if(firstLaunch){ mFirstLaunch = true; // do this only for the first boot SystemProperties.set("persist.sys.sw.firstLaunch", "false"); } Slog.d(TAG, "mFirstLaunch = " + mFirstLaunch); // if(mFirstLaunch){ IPackageManager pm = ActivityThread.getPackageManager(); //clear the current preferred launcher ArrayList<IntentFilter> intentList = new ArrayList<IntentFilter>(); ArrayList<ComponentName> cnList = new ArrayList<ComponentName>(); mContext.getPackageManager().getPreferredActivities(intentList, cnList, null); IntentFilter dhIF; for(int i = 0; i < cnList.size(); i + + ) { dhIF = intentList.get(i); if(dhIF.hasAction(Intent.ACTION_MAIN) & amp; & amp; dhIF.hasCategory(Intent.CATEGORY_HOME)) { mContext.getPackageManager().clearPackagePreferredActivities(cnList.get(i).getPackageName()); } } // get all Launcher activities Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); List<ResolveInfo> list = new ArrayList<ResolveInfo>(); try { list = pm.queryIntentActivities(intent, intent.resolveTypeIfNeeded(mContext.getContentResolver()), PackageManager.MATCH_DEFAULT_ONLY, userId); }catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } // get all components and the best match IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_HOME); filter.addCategory(Intent.CATEGORY_DEFAULT); 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; } // add the default launcher as the preferred launcher ComponentName launcher = new ComponentName(packageName, className); try { pm.addPreferredActivity(filter, bestMatch, set, launcher, userId); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } //} } }
3. Find HomeSettings.java
Find the HomeSettings.java file in ..\rk3229_5.1_box\packages\apps\Settings\src\com\android\settings. Set the desktop you need for the second time in makeCurrentHome. Mainly because customers have two desktops and need to switch frequently.
void makeCurrentHome(HomeAppPreference newHome) { if (mCurrentHome != null) { mCurrentHome.setChecked(false); } newHome.setChecked(true); mCurrentHome = newHome; mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY, mHomeComponentSet, newHome.activityName); //huangxing add System.out.println("huangxing----activityName== " + newHome.activityName); //ComponentName chatActivity =new ComponentName(); \t\t String launcherInfo = newHome.activityName.toString(); System.out.println("huangxing----launcherInfo== " + launcherInfo); if(launcherInfo.indexOf("com.android.launcher3") != -1){ SystemProperties.set("persist.sys.yz.defpackage", "com.android.launcher3"); SystemProperties.set("persist.sys.yz.defclass", "com.android.launcher3.Launcher"); System.out.println("huangxing---launcher3-----"); }else if(launcherInfo.indexOf("com.zhai.ads") != -1){ SystemProperties.set("persist.sys.yz.defpackage", "com.zhai.ads"); SystemProperties.set("persist.sys.yz.defclass", "com.zhai.touchhome.Loading"); System.out.println("huangxing---com.zhai.ads-----"); }else { //wjz add System.out.println("huangxing---heshiling launcher-----"); SystemProperties.set("persist.sys.yz.defpackage", "com.zhaisoft.app.hesiling"); SystemProperties.set("persist.sys.yz.defclass", "com.zhaisoft.app.hesiling.activity.MainActivity"); //SystemProperties.set("persist.sys.yz.defpackage", "com.zhai.ads"); //SystemProperties.set("persist.sys.yz.defclass", "com.zhai.touchhome.Loading"); } getActivity().setResult(Activity.RESULT_OK); \t\t \t }
4. In the System.prop file, set the default launcher
In order to make customer customization more flexible, the default launcher parameters were later set in System.prop. Through script configuration, one-stop compilation is performed.