驱动部分不太清楚,默认是配置了的,但是我们的硬件上并没有马达,于是要在上层去掉相关的逻辑。之前在Android Q 上的修改如下:
frameworks/base/services/core/java/com/android/server/VibratorService.java
@Override // Binder call
public boolean hasVibrator() {
/*lichang 禁用振动功能*/
//return doVibratorExists();
return false;
}
但是在Android S 上并没有找到这个类,有些奇怪,检索一下 hasVibrator() 方法,除去 systemUI 和 tests 的文件也就红框中的包含定义了
查看这些类的注释,发现 SystemVibrator 的注释为
英:Vibrator implementation that controls the main system vibrator.
中:控制主系统振动器的振动器实现。
直接改为false,如下
@Override
public boolean hasVibrator() {
if (mVibratorManager == null) {
Log.w(TAG, "Failed to check if vibrator exists; no vibrator manager.");
return false;
}
//lichang forbidden vibration
//return mVibratorManager.getVibratorIds().length > 0;
return false;
}
,感觉可以了,编译验证,发现 make framework 并未生成 framework.jar 文件 ~~~
找一下 frameworks/base 的 Android.bp 文件,部分如下:
356 java_library {
357 name: "framework-minus-apex",
358 defaults: ["framework-minus-apex-defaults"],
359 installable: true,
360 // For backwards compatibility.
361 stem: "framework",
362 apex_available: ["//apex_available:platform"],
363 visibility: [
364 "//frameworks/base",
365 // TODO(b/147128803) remove the below lines
366 "//frameworks/base/apex/appsearch/framework",
367 "//frameworks/base/apex/blobstore/framework",
368 "//frameworks/base/apex/jobscheduler/framework",
369 "//frameworks/base/packages/Tethering/tests/unit",
370 "//packages/modules/Connectivity/Tethering/tests/unit",
371 ],
372 errorprone: {
373 javacflags: [
374 "-Xep:AndroidFrameworkBinderIdentity:ERROR",
375 "-Xep:AndroidFrameworkCompatChange:ERROR",
376 "-Xep:AndroidFrameworkUid:ERROR",
377 ],
378 },
379 }
再次执行 make framework-minus-apex -j8
我们项目的编译产物路径为:out/target/product/sl8541e_1h10_32b/system/framework/framework.jar
最后 push 验证。
如果有无法开机的情况试试删除以上文件