一、fastboot刷机

首先安装adb和fastboot

sudo apt-get install android-tools-adb android-tools-fastboot

进入Fastboot模式

首先,确保你的手机能够adb连接,然后通过adb执行如下指令进入Fastboot模式,命令如下:

1
sudo adb reboot-bootloader

稍等片刻,手机会重启进入Fastboot模式,查看通过如下命令进行确认:

1
sudo fastboot devices

刷img文件

  1. 刷boot.img指令
1
sudo fastboot flash boot boot.img
  1. 刷system.img指令
1
sudo fastboot flash system system.img
  1. 刷userdata.img指令
1
sudo fastboot flash userdata userdata.img
  1. 重启手机即可
1
sudo fastboot reboot

二、系统编译

编译系统-全编

1.安装软件

1
2
3
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32
tofrodos python-markdown libxml2-utils xsltproc

2.安装openJDK

1
2
3
sudo add-apt-repository ppa:openjdk-r/ppa 
sudo apt-get update
sudo apt-get install openjdk-8-jdk

如果你已经安装openJDK7或其他,可以使用下面命令修改

1
sudo update-alternatives --config java

3.编译系统

1
2
3
4
1、source build/envsetup.sh
2、lunch
//该命令会显示可编译的所有版本,请选择一种,输入对应数字即可
3、make –j8

然后请等待编译结束,编译完成后在/out/target/product/msm8953_64/下找到对应的img文件

编译系统-模块编译

1
2
3
make update-api //更新API接口,代码有修改,git pull拉取代码后请先执行该命令

make systemimage -j8 //单独编译system.img

单模块编译

修改应用源码

例如修改了设置Settings代码,可以单独编译Settings的源码,编译出Settings.apk验证

1
2
3
cd packages/apps/Settings/

mm // 单独编译Settings.apk

编译完成后

1
2
3
4
adb root
adb remount
adb push Settings.apk /system/priv-app/Settings/
adb reboot
修改源码framework后编译
  1. framework/base/core/res/res下添加或修改资源文件后需要先编译资源,然后编译framework 才可正常引用。
1
2
cd frameworks/base/core/res/ 
mm
  1. 编译 framework.jar
1
2
cd frameworks/base/ 
mm
  1. 如果 frameworks/base/services 下有修改,则要编译frameworks/base/services/java/ 执行mm ,编译 services.jar

  2. 执行如下命令

1
2
3
4
adb remount
adb push framework-res.apk /system/framework/
adb push framework.jar /system/framework/
adb push services.jar /system/framework/ (如果有修改的话)
  1. push后,可以cd system/framework 进入目录,以ll命令确认下是否push成功。
  2. adb reboot 重启设备。

三、系统定制

1 Launcher过滤App

LauncherMode.java 中有一个loadAllApps函数,Launcher在其中加载所有App

1
2
3
4
5
6
7
8
9
10
// Create the ApplicationInfos
for (int i = 0; i < apps.size(); i++) {
LauncherActivityInfoCompat app = apps.get(i);
Log.e(TAG,"loadAllPackages ="+app.getComponentName().getPackageName());
if(app.getComponentName().getPackageName() == "com.android.settings" || app.getComponentName().getPackageName().contains("decard")){
Log.e(TAG,"settings || decard");
// This builds the icon bitmaps.
mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache, quietMode));
}
}

2 去除抽屉

Android7.1 Launcher3去除抽屉

3 添加自定义系统服务

Android 添加自定义系统服务