mtk解锁方式
1、setting -> system -> Developer options -> OEM unlocking
进入开发者模式中打开 OEM
2 adb reboot bootloader
3 fastboot flashing unlock
4 按音量上键
5 fastboot reboot
6 adb root
7 adb disable-verity
8 adb reboot
9 adb root
10 adb remount
Mtk S+T编译方式
编译步骤
1 先进入alps-mp-s0目录 比如编译userdebug版本 命令如下
source build/envsetup.sh
export OUT_DIR=out
lunch vnd_k62v1_64_bsp-usedebug
make vnd_images krn_images 2>&1 | tee build_vendor.log
2 第一步编译完 再进入 alps-mp-t0 再执行这一步
source build/envsetup.sh
export OUT_DIR=out_sys
lunch sys_mssi_64_cn-userdebug
make sys_images 2>&1 | tee build.log
3 执行完第三步 还是在alps-mp-t0这个目录 再执行这一步。 就编译完成了
python out_sys/target/product/mssi_64_cn/images/split_build.py --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir ../alps-mp-s0/out/target/product/k62v1_64_bsp/images --kernel-dir ../alps-mp-s0/out/target/product/k62v1_64_bsp/images --output-dir out_sys/target/product/mssi_64_cn/merged/ 2>&1 | tee build_python.log
添加可卸载内置apk名单
ap/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_system_list.txt
修改盘符和蓝牙名称、系统值
ap/build/make/tools/buildinfo.sh
+echo "ro.build.id=M392"
+echo "ro.build.display.id=T04_50_2_16_3.99inch_7701S_M392_V1.0_`$DATE +%Y%m%d`"
+echo "ro.product.model=M392"
+echo "ro.product.brand=M392"
+echo "ro.product.name=M392"
+echo "ro.product.device=M392"
echo "ro.build.product=M392"
蓝牙名称
ap/device/generic/common/bluetooth/bdroid_buildcfg.h
#define BTM_DEF_LOCAL_NAME "M392"
修改热点名称
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiApConfigStore.java
ap/device/mediateksample/k50v1_64_bsp/system.prop
persist.sys.auto.sd.time=30
广播
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class hqb {
private Receiver mReceiver;
Context mContext;
void Send(){//发送
Intent intent=new Intent();
intent.setAction("HQB_HQB");
mContext.sendBroadcast(intent);
}
void init(){//注册广播
mReceiver= new Receiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("HQB_HQB");
mContext.registerReceiver(mReceiver,intentFilter);
}
final class Receiver extends BroadcastReceiver {//接收广播
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("HQB_HQB")) {
//要执行的动作
}
}
}
void onPause(){//销毁广播
mContext.unregisterReceiver(mReceiver);
}
}
线程
new Thread(){
@Override
public void run() {
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
//执行的方法
}
}.start();
Toast
+++ b/ap/frameworks/base/core/java/android/widget/Toast.java
@@ -39,7 +39,7 @@ import android.view.View;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
-
+import java.util.Locale;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -131,6 +131,7 @@ public class Toast {
INotificationManager service = getService();
String pkg = mContext.getOpPackageName();
+ android.util.Log.d("hqb","pkg="+pkg);
TN tn = mTN;
tn.mNextView = mNextView;
@@ -267,6 +268,24 @@ public class Toast {
*
*/
public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
+ android.util.Log.d("hqb","6text="+text.toString());
+ Locale locale = context.getResources().getConfiguration().locale;
+ Log.d("hqb",locale.getLanguage());
+ if(text.toString().contains("关闭中")){
+ if(locale.getLanguage().contains("en")){
+ text="closing";
+ }else if(locale.getLanguage().contains("ja")){
+ text="closing";
+ }else if(locale.getLanguage().contains("de")){
+ text="closing";
+ }else if(locale.getLanguage().contains("fr")){
+ text="closing";
+ }else if(locale.getLanguage().contains("it")){
+ text="closing";
+ }else if(locale.getLanguage().contains("es")){
+ text="closing";
+ }
+ }
return makeText(context, null, text, duration);
}
移除一览
usb默认为文件传输
X:\AndroidT_2\sprd.mocor13.androidT\frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java
protected void finishBoot()和public void handleMessage(Message msg) {
//setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
setEnabledFunctions(UsbManager.FUNCTION_MTP, false);
移除蓝牙的共享联系人
X:\AndroidT_2\sprd.mocor13.androidT\frameworks\base\packages\SettingsLib\src\com\android\settingslib\bluetooth\PbapServerProfile.java
public boolean isProfileReady() {
return false;
}
移除锁定屏幕-->通过已锁定的设备
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\src\com\android\settings\display\ControlsTrivialPrivacyPreferenceController.java
UNSUPPORTED_ON_DEVICE;
连接偏好设置移除蓝牙
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\res\xml\connected_devices_advanced.xml
蓝牙加已连接的设备
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\res\xml\connected_devices.xml中的
<Preference
android:key="previously_connected_devices_see_all"
android:title="@string/previous_connected_see_all"
android:icon="@drawable/ic_chevron_right_24dp"
android:order="10"
settings:searchable="false"
android:fragment="com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment"/>
移到X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\res\xml\bluetooth_screen.xml
移除按流量计费
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\res\layout\wifi_network_config.xml
metered_settings
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\src\com\android\settings\wifi\WifiConfigController2.java
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\src\com\android\settings\wifi\WifiConfigController.java
mMeteredSettingsSpinner
移除不属于运营商的流量消耗
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\src\com\android\settings\network\NetworkProviderSettings.java
mDataUsagePreference.setVisible(false);
移除锁定屏幕的快捷方式
X:\AndroidT_2\sprd.mocor13.androidT\packages\apps\Settings\src\com\android\settings\accessibility\AccessibilityShortcutPreferenceController.java
@Override
public int getAvailabilityStatus() {
return UNSUPPORTED_ON_DEVICE;
}
移除备份和多用户
packages\apps\Settings\src\com\android\settings\SettingsActivity.java
import com.android.settings.backup.UserBackupSettingsActivity;
somethingChanged = setTileEnabled(changedList, //hqb
new ComponentName(packageName,
UserBackupSettingsActivity.class.getName()), false, isAdmin)
|| somethingChanged;
somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
Settings.UserSettingsActivity.class.getName()),false, isAdmin)
|| somethingChanged;
packages/apps/Settingsres/xml/top_level_settings.xml
移除下拉状态栏编辑图标
frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java
setting搜索框过滤某些关键字
packages/apps/SettingsIntelligence/src/com/android/settings/intelligence/search/SearchResultsAdapter.java
// modify by yxiaobin Search for cast, and no result is displayed begin
import android.util.Log;
import android.text.TextUtils;
// modify by yxiaobin Search for cast, and no result is displayed end
public void postSearchResults(List<? extends SearchResult> newSearchResults) {
final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(
new SearchResultDiffCallback(mSearchResults, newSearchResults));
mSearchResults.clear();
/* modify by yxiaobin Search for cast, and no result is displayed begin */
notifyDataSetChanged();
int index = -1;
if(newSearchResults.size()>0){
for (int i= 0; i < newSearchResults.size(); i++) {
SearchResult sr = newSearchResults.get(i);
String title ="";
String summary="";
String dataKey="";
if(!TextUtils.isEmpty(sr.title)){
title = sr.title.toString();}
if(!TextUtils.isEmpty(sr.summary)){
summary=sr.summary.toString();}
if(!TextUtils.isEmpty(sr.dataKey)){
dataKey=sr.dataKey.toString();}
if("Cast".equalsIgnoreCase(title)||"cast".equalsIgnoreCase(summary)||"cast".equalsIgnoreCase(dataKey)||"Cast options".equalsIgnoreCase(title)||"Wi-Fi calling".equalsIgnoreCase(title)
|| title.contains("Wireless") || summary.contains("Receive wireless") || summary.contains("Wireless") || dataKey.contains("Wireless")
|| title.contains("Face") || summary.contains("Face") ){//modify by lzerong 20230601 for remove EmergencyBroadcast and Face ID
index = i;
newSearchResults.remove(index);
notifyDataSetChanged();
i--;
}
}
}
在clearallbutton中图标和文本动态居中
//packages/apps/Launcher3/quickstep/src/com/sprd/ext/clearall/ClearAllButton.java
protected void onDraw(Canvas canvas) {
Drawable[] drawables = getCompoundDrawables();
if(drawables !=null) {
Drawable drawableLeft = drawables[0];
if(drawableLeft !=null) {
float textWidth = getPaint().measureText(getText().toString());
int drawablePadding = getCompoundDrawablePadding();
int drawableWidth =0;
drawableWidth = drawableLeft.getIntrinsicWidth();
float bodyWidth = textWidth + drawableWidth + drawablePadding;
canvas.translate((getWidth() - bodyWidth) /2,0);
}
}
super.onDraw(canvas);
}
Google search替换成可移动可删除的小部件
//packages/apps/Launcher3/src/com/android/launcher3/config/FeatureFlags.java
--public static final boolean QSB_ON_FIRST_SCREEN = true;
++public static final boolean QSB_ON_FIRST_SCREEN = false;
//vendor/partner_gms/apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml
++<appwidget screen="0" x="0" y="0" spanX="5" spanY="1" packageName="com.google.android.googlequicksearchbox" className="com.google.android.googlequicksearchbox.SearchWidgetProvider" />
//vendor/partner_gms/apps/SearchLauncher/res/xml/launcher_preferences.xml
-- <androidx.preference.PreferenceScreen
android:key="pref_smartspace"
android:persistent="false"
android:summary="@string/smartspace_preferences_in_settings_desc"
android:title="@string/smartspace_preferences_in_settings"/>
模拟按键命令
public static void sendKeyEvent(final int KeyCode) {
new Thread() {
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
判断屏幕是否旋转
import android.content.SharedPreferences;
import com.android.launcher3.Utilities;
private boolean getHomeRotationEnabled(){
SharedPreferences mSharedPrefs = Utilities.getPrefs(getContext());
boolean mHomeRotationEnabled=mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY,false);
Log.d("TaskView","mHomeRotationEnabled:"+mHomeRotationEnabled);
return mHomeRotationEnabled;
}
定制侧滑返回
//frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java
navigation_edge_panel_width 110
navigation_edge_panel_height 200
//mPaint.setStyle(Paint.Style.FILL); 填充线条 Paint.Style.STROKE不填充
//mPaintwt.setColor(Color.LTGRAY); 设置颜色
//mArrowPaint.setStrokeWidth(4); 线条粗细
//mPaintwt.setAlpha(180); 透明度
private final Paint mPaint = new Paint()
Path mPath= new Path();
@Override
protected void onDraw(Canvas canvas) {
float pointerPosition = mCurrentTranslation - mArrowThickness / 2.0f;
mPath.reset();
int factor = mIsLeftPanel ? 1 : -1;
int currentY = getHeight() / 2;
int topY = 0;
int bottomY = getHeight();
int footX = mIsLeftPanel ? 0 : getWidth();
int peekX = (int) (footX + factor * (mIsLeftPanel ? pointerPosition : pointerPosition - getStaticArrowWidth()) / 2);
mPath.moveTo(footX, topY);
mPath.cubicTo(footX, topY + 75, peekX, topY + 100, peekX, currentY);
mPath.cubicTo(peekX, bottomY - 100, footX, bottomY - 75, footX, bottomY);
mPath.close();
//canvas.drawColor(Color.argb(125,255,0,0));
canvas.drawPath(mPath, mPaintwt);
mArrowPath.reset();
mArrowPath.moveTo(mIsLeftPanel?(peekX-40 + dp(3.5f)):(peekX+40 + dp(3.5f)), getHeight() / 2 - dp(5.5f));
mArrowPath.lineTo(mIsLeftPanel?(peekX-40 - dp(4f)):(peekX+40 - dp(4f)), getHeight() / 2);
mArrowPath.lineTo(mIsLeftPanel?(peekX-40 + dp(3.5f)):(peekX+40 + dp(3.5f)), getHeight() / 2 + dp(5.5f));
canvas.drawPath(mArrowPath, mArrowPaint);
}
判断WiFi是否连接、数据是否开启
//判断网络是否连接
public boolean isWifiConnect() {
ConnectivityManager connManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_