由于特殊需求,需要在SystemUI中添加第三方AIDL,去做一些客制化的修改。現在記錄一下AIDL添加的過程。
1.將AIDL文件拷貝到frameworks/base/packages/SystemUI/src/下,我要添加的AIDL文件是com/test/myctr/IDevicectr.aidl,添加后的路徑是frameworks/base/packages/SystemUI/src/com/test/myctr/IDevicectr.aidl。
2.修改frameworks/base/packages/SystemUI/Android.bp,將AIDL編譯到apk里面。
?
android_library {name: "SystemUI-core",defaults: ["SystemUI_compose_defaults",],srcs: ["src/**/*.kt","src/**/*.java","src/**/I*.aidl",
+ "src/com/test/myctr/IDevicectr.aidl",":ReleaseJavaFiles",],
+ aidl: {
+ local_include_dirs: [
+ "src/com/test/myctr",
+ ],},product_variables: {debuggable: {srcs: [":DebugJavaFiles"],exclude_srcs: [":ReleaseJavaFiles"],},},
3.在frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java中去綁定連接AIDL服務。首先導入AIDL的服務類"import com.test.myctr.IDevicectr;"。然后在SystemUIApplication.java中的onCreate()里面調用自定義的initserver()函數初始化服務。下面是初始化服務的函數實現:
+ public void initserver(){//初始化服務
+ Intent intent = new Intent(new Intent("com.test.DevicectrServer"));
+ intent.setPackage("com.android.device_ctr");
+ this.startService(intent);
+ this.bindService(intent, new ServiceConnection()
+ {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service)
+ {
+ apiserver = IYFAPIserver.Stub.asInterface(service);
+ int_flag = true;
+ setDevice();//調用AIDL接口初始化設備
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name)
+ {
+ int_flag = false;
+ }
+ }, BIND_AUTO_CREATE);
+ }
上面函數在連接到服務以后,就可以去調用AIDL的接口去做操作了。
?