Androidカスタマイズ:出荷時の設定を復元してSystemUIを削除する

7897 ワード

プラットフォーム:android M
必要:
1.お客様のニーズ、Launcher機能付きapkを予め設定する.システムのすべてのapkを除去する.SystemUIを含む.
2.工場はシステムのLauncher 3とsystemUIを必要としてテスト操作を完成する.
考え方:
以上のニーズに基づいて、1つの解決策を考えて、初めてソフトウェアをダウンロードして、システムUIとLauncher 3を持っています.工場試験完了後、工場出荷時の設定を復元し、システムUIとLauncher 3を除去する.
ソリューション1:
1.Launcherはdata/appの下に予め設定する.
修正:Launcher 3/Android.mk
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
2.SystemUIの変更
2.1工場出荷時の設定を認識する方法を追加する.
プリセットdevice/mediatek/common/setupファイル
デバイス/mediatek/common/deviceを変更します.mk
+#setup +PRODUCT_COPY_FILES += device/mediatek/common/setup:data/app/setup
出荷時の設定を復元すると、そのファイルが削除され、そのファイルの存在を判断することにより、出荷時の設定を復元することができる.
2.2システムuiで判定を開始する:
SystemServer.java
+if(isFirst()){ +      try { +           startSystemUi(context); +       } catch (Throwable e) { +           reportWtf("starting System UI", e); +       } +    }else{ +          Slog.i(TAG, "Do not startSystemUi"); +   }   
+    private boolean isFirst(){ +        File file = new File(path); +        if (file.exists()) { +            return true; +        } +        return false; +    } 
        
SystemUIApplication.java
-                if (mServicesStarted) { -                    final int N = mServices.length; -                    for (int i = 0; i < N; i++) { -                        mServices[i].onBootCompleted(); -                    } -                } +                               if(isFirst()){ +                                       if (mServicesStarted) { +                                               final int N = mServices.length; +                                               for (int i = 0; i < N; i++) { +                                                       mServices[i].onBootCompleted(); +                                               } +                                       }++                               } +               
         if (mServicesStarted) {              return;          } +               if(!isFirst()){ +                       Log.d(TAG, "do not startServicesIfNeeded"); +            return; +               }else{ +                       Log.d(TAG, "startServicesIfNeeded"); +               }
-        if (mServicesStarted) { +        if (mServicesStarted && isFirst()) {              int len = mServices.length;              for (int i = 0; i < len; i++) {                  mServices[i].onConfigurationChanged(newConfig);
SystemUIService.java
     @Override      public void onCreate() {          super.onCreate(); -        ((SystemUIApplication) getApplication()).startServicesIfNeeded(); +               if(isFirst()){ +                       ((SystemUIApplication) getApplication()).startServicesIfNeeded(); +               }else{++               } +              }        @Override @@ -38,21 +45,33 @@ public class SystemUIService extends Service {        @Override      protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { -        SystemUI[] services = ((SystemUIApplication) getApplication()).getServices(); -        if (args == null || args.length == 0) { -            for (SystemUI ui: services) { -                pw.println("dumping service: "+ ui.getClass().getName()); -                ui.dump(fd, pw, args); -            } -        } else { -            String svc = args[0]; -            for (SystemUI ui: services) { -                String name = ui.getClass().getName(); -                if (name.endsWith(svc)) { -                    ui.dump(fd, pw, args); -                } -            } -        } +        if(isFirst()){ +               SystemUI[] services = ((SystemUIApplication) getApplication()).getServices(); +               if (args == null || args.length == 0) { +                   for (SystemUI ui: services) { +                       pw.println("dumping service: "+ ui.getClass().getName()); +                       ui.dump(fd, pw, args); +                   } +               } else { +                   String svc = args[0]; +                   for (SystemUI ui: services) { +                       String name = ui.getClass().getName(); +                       if (name.endsWith(svc)) { +                           ui.dump(fd, pw, args); +                       } +                   } +               } +               } +              }
2.3シールドロック
frameworks/base/packages/SystemUI/res/values/config.xml
 false
以上の変更により、工場出荷時の設定を復元するシステムUIをマスクすることができる.
ソリューション2:
こんな操作があるなんて.意外です.
/**
 * Uses Root access to enable and disable SystemUI.
 * @param enabled Decide whether to enable or disable.
 */
public void setSystemUIEnabled(boolean enabled){
    try {
        Process p = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(p.getOutputStream());
        os.writeBytes("pm " + (enabled ? "enable" : "disable") 
                + " com.android.systemui
"
); os.writeBytes("exit
"
); os.flush(); } catch (IOException e) { e.printStackTrace(); } }
setSystemUIEnabled(true);  // Enable SystemUI
setSystemUIEnabled(false); // Disable SystemUI