比如删除NFC feature:
Index: frameworks/base/core/java/com/android/server/SystemConfig.java
===================================================================
--- frameworks/base/core/java/com/android/server/SystemConfig.java (版本 1412)
+++ frameworks/base/core/java/com/android/server/SystemConfig.java (版本 1415)
@@ -25,6 +25,7 @@
import android.os.Build;
import android.os.Environment;
import android.os.Process;
+import android.os.SystemProperties;
import android.os.storage.StorageManager;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -723,6 +724,10 @@
addFeature(PackageManager.FEATURE_RAM_NORMAL, 0);
}
+ mUnavailableFeatures.add(PackageManager.FEATURE_NFC);
for (String featureName : mUnavailableFeatures) {
removeFeature(featureName);
}
虽然config里面删除了,但是如果通过
NfcManager manager = (NfcManager) mContext.getSystemService(Context.NFC_SERVICE);
还是能获取NfcManager对象,但是调用都会报空指针,现象就是调用的app崩溃或者系统报异常。
所以还需要在系统服务注册的时候加一句判断:
Index: frameworks/base/core/java/android/app/SystemServiceRegistry.java
===================================================================
--- frameworks/base/core/java/android/app/SystemServiceRegistry.java (版本 1475)
+++ frameworks/base/core/java/android/app/SystemServiceRegistry.java (工作副本)
@@ -327,6 +327,9 @@
new CachedServiceFetcher<NfcManager>() {
@Override
public NfcManager createService(ContextImpl ctx) {
+ if (!ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) {
+ return null;
+ }
return new NfcManager(ctx);
}});