1.修改藍牙爲從端
device/qcom/msmxxx/system.prop
//設置成從模式
persist.service.bt.a2dp.sink=true
persist.service.bt.hfp.client=true
device/qcom/msmxxx/overlay/packages/apps/Bluetooth/res/values/config.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="profile_supported_a2dp_sink">true</bool>
<bool name="profile_supported_avrcp_controller">true</bool>
<bool name="profile_supported_hfpclient">true</bool>
<bool name="profile_supported_pbapclient">true</bool>
</resources>
2.修改默認的睡眠超時和屏幕關閉超時
device/qcom/msmxxx/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_screen_off_timeout">2147483647</integer>
<integer name="def_sleep_timeout">2147483647</integer>
3.配置液晶屏密度
device/qcom/common/rootdir/etc/init.qcom.early_boot.sh
function set_density_by_fb() {
#put default density based on width
if [ -z $fb_width ]; then
setprop ro.sf.lcd_density 320
else
if [ $fb_width -ge 1920 ]; then
setprop ro.sf.lcd_density 320 # 1920x1080
elif [ $fb_width -ge 1080 ]; then
setprop ro.sf.lcd_density 480
elif [ $fb_width -ge 1024 ]; then
setprop ro.sf.lcd_density 160 # 1024x600
elif [ $fb_width -ge 720 ]; then
setprop ro.sf.lcd_density 320 #for 720X1280 resolution
elif [ $fb_width -ge 480 ]; then
setprop ro.sf.lcd_density 240 #for 480X854 resolution
else
setprop ro.sf.lcd_density 160
fi
fi
}
4.刪除導航欄並鎖定屏幕方向橫向
device/qcom/msmxxx/overlay/frameworks/base/core/res/res/values/config.xml
<bool name="config_cameraDoubleTapPowerGestureEnabled">false</bool>
<bool name="config_supportAutoRotation">false</bool>
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
//addNavigationBar();
frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
boolean updateOrientationFromAppTokensLocked(boolean inTransaction) {
. .........
//int req = getOrientationLocked();
int req = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
.............
}
5.刪除no_sim和new_sim對話框
vendor/qcom/proprietary/qrdplus/Extension/apps/PhoneFeatures/res/values/configs.xml
<bool name="feature_new_sim">false</bool>
<bool name="feature_no_sim">false</bool>
6.adb設備序列號爲空
kernel/msm-3.18/drivers/usb/gadget/android.c
// #if defined(CONFIG_DEBUG_ATOMIC_SLEEP)
// id=0;
// #else
id = usb_string_id(cdev);
// #endif
7.增加自定義系統按鍵
device/qcom/common/base.mk
KEYPAD += aaaaa.kl
device/qcom/msm8953_64/AndroidBoard.mk
include $(CLEAR_VARS)
LOCAL_MODULE := aaaaa.kl
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_PATH := $(TARGET_OUT_KEYLAYOUT)
include $(BUILD_PREBUILT)
device/qcom/msmxxx/aaaaa.kl
key 0x17b BACK_CAMERA
key 0x21e ILL_LIGHT
key 0x74 POWER
frameworks/native/include/input/InputEventLabels.h
DEFINE_KEYCODE(BACK_CAMERA),
DEFINE_KEYCODE(ILL_LIGHT),
frameworks/native/include/android/keycodes.h
AKEYCODE_BACK_CAMERA = 284,
AKEYCODE_ILL_LIGHT = 285
frameworks/base/core/res/res/xml/global_keys.xml
<key keyCode="KEYCODE_BACK_CAMERA" component="com.quectel.multicamera/.CustomActivity" />
frameworks/base/core/res/res/values/attrs.xml
<enum name="KEYCODE_BACK_CAMERA" value="284" />
<enum name="KEYCODE_ILL_LIGHT" value="285" />
frameworks/base/core/java/android/view/KeyEvent.java
public static final int KEYCODE_BACK_CAMERA = 284;
public static final int KEYCODE_ILL_LIGHT = 285;
//private static final int LAST_KEYCODE = KEYCODE_SYSTEM_NAVIGATION_RIGHT;
private static final int LAST_KEYCODE = KEYCODE_ILL_LIGHT;
case KeyEvent.KEYCODE_BACK_CAMERA:
case KeyEvent.KEYCODE_ILL_LIGHT:
8. user 支持 fastboot
bootable/bootloader/lk/makefile
#ifeq ($(TARGET_BUILD_VARIANT),user)
# CFLAGS += -DDISABLE_FASTBOOT_CMDS=1
#endif
9.修改Telephony.getDeviceId 返回IMEI
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
/*public String getDeviceId(int slotId) {
android.util.SeempLog.record_str(8, ""+slotId);
// FIXME this assumes phoneId == slotId
try {
IPhoneSubInfo info = getSubscriberInfo();
if (info == null)
return null;
return info.getDeviceIdForPhone(slotId, mContext.getOpPackageName());
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}*/
public String getDeviceId(int slotId) {
ITelephony telephony = getITelephony();
if (telephony == null) return null;
try {
return telephony.getImeiForSlot(slotId, getOpPackageName());
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}
10.修改開機提示無網絡問題 或者網絡圖標問題
frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
//private static final String DEFAULT_HTTPS_URL = "https://www.google.com/generate_204";
//private static final String DEFAULT_HTTP_URL =
// "http://connectivitycheck.gstatic.com/generate_204";
//private static final String DEFAULT_FALLBACK_URL = "http://www.google.com/gen_204";
private static final String DEFAULT_HTTPS_URL = "https://www.qualcomm.cn/generate_204";
private static final String DEFAULT_HTTP_URL =
"http://www.qualcomm.cn/generate_204";
private static final String DEFAULT_FALLBACK_URL = "http://www.qualcomm.cn/generate_204";
11 .刪除檢查com.google.android.gms
frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
private int getAllowedUid(int userHandle) {
//String allowedPackage = mContext.getResources()
// .getString(R.string.config_persistentDataPackageName);
//PackageManager pm = mContext.getPackageManager();
int allowedUid = -1;
/*try {
allowedUid = pm.getPackageUidAsUser(allowedPackage,
PackageManager.MATCH_SYSTEM_ONLY, userHandle);
} catch (PackageManager.NameNotFoundException e) {
// not expected
Slog.e(TAG, "not able to find package " + allowedPackage, e);
}*/
return allowedUid;
}
11 .在啓動時啓動警告消息服務
packages/apps/Settings/src/com/android/settings/FallbackHome.java
private void maybeFinish() {
if (getSystemService(UserManager.class).isUserUnlocked()) {
final Intent homeIntent = new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME);
final ResolveInfo homeInfo = getPackageManager().resolveActivity(homeIntent, 0);
if (Objects.equals(getPackageName(), homeInfo.activityInfo.packageName)) {
Log.d(TAG, "User unlocked but no home; let's hope someone enables one soon?");
mHandler.sendEmptyMessageDelayed(0, 500);
} else {
Log.d(TAG, "User unlocked and real home found; let's go!");
//add code
Intent warningIntent = new Intent();
warningIntent.setPackage("com.pvetec.warningmessage");
warningIntent.setAction("pvetec.intent.action.boot.disclaimer.service.start");
startService(warningIntent);
//add code
getSystemService(PowerManager.class).userActivity(
SystemClock.uptimeMillis(), false);
finish();
}
}
12 .用emmc和usbotg掛載路徑
system/vold/PublicVolume.cpp
idx = msyspath.find("2-1.2");
if(idx == std::string::npos){
} else {
stableName = "usbotg-2-1.2";
}
idx = msyspath.find("mmc1:0002");
if(idx == std::string::npos){
} else {
stableName = "mmc1-0002";
}
13 .usb3.0和usb2.0設備安裝路徑
system/vold/PublicVolume.cpp
idx = msyspath.find("xhci-hcd.0.auto/usb");
if(idx == std::string::npos){
} else {
stableName = "usbotg-2-1.2";
}
idx = msyspath.find("mmc1:");
if(idx == std::string::npos){
} else {
stableName = "mmc1-0002";
}