当前位置: 首页 > news >正文

Framework入门のPiex 6P源码(下载/编译/刷机)

文章目录

      • 前言
      • 第一步:源代码在哪里如何下载
      • 第二步:如何编译,用到哪些命令,编译目标文件是什么
        • 模拟器
        • 真机
      • 第三步:如何修改指定代码并重新安装到手机
      • 第四步:如何阅读源代码
      • 第五步:如何在Linux环境Coding
      • 第六步:官方刷机操作

前言

笔者这里有一部Piex 6p 手机(400RMB)(编号:5.170623.007),因为大多数定制手机手机都是基于谷歌原生修改而来,所以有必要准备一部,方便学习,那么现在开始吧。。
我们先思考下划分步骤进行

第一步:源代码在哪里如何下载

  1. 工具安装:git、curl及编译工具
    sudo apt install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libncurses5 libxml2-utils python xsltproc unzip
  2. 如下根据个人喜好,我们建好源码路径
  3. repo.sh是我们创建的第一个文件,然后复制粘贴下面的文件内容即可
  4. 这里面涉及到一些命令如下
创建文件复制粘贴编辑授权执行
touch repo.shCtrl +Shift + CCtrl +Shift + V or Shift +Insertgedit repo.shsudo chmod 777 repo.sh./repo.sh

源码路径

repo.sh

.#!/usr/bin/env bash
 
export LOG_ACCOUNT=tmp
export LOG_FILENAME=repo-sync
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
 
aosp_branch=android-8.0.0_r17
 
if [ ! -d ".repo" ]; then
    repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b $aosp_branch
    repo_stat=$?
    if [ $repo_stat -ne 0 ]; then
        echo "init repo faild, please try again"
        exit 0
    fi
else
    echo "local .repo dir exists"
fi
 
try_count=0
echo "from remote sync aosp"
 
repo sync
repo_stat=$?
while [ $repo_stat -ne 0 ]; do
    echo "sync faild, status: $repo_stat, try again in 5s ..."
    sleep 5
    repo sync
    repo_stat=$?
    ((try_count++))
done
 
echo "sync repo over, try_count: $try_count"
echo "sync over, success"

先等着吧··,得好几个小时,建议晚上去拉

方式二
Android小码家
公众号回复
Android源码
获取百度云资源

PS:还没玩转之前下不建议这样操作

驱动程序
上图红框内还有两个文件没有提到,即设备驱动程序

extract-huawei-angler.sh
extract-qcom-angler.sh
https://developers.google.com/android/drivers驱动

安装
使用上述的 ./extract-huawei-angler.sh ./extract-qcom-angler.sh安装
安装
1. 存放位置在哪?
解:即/data/android-8.0.0_r17/,前面截图已给出位置
2. 没找到这两个文件?
解:当然没有,需要解压上述两个文件后,复制到/data/android-8.0.0_r17/

解压
解压命令

tgzbz2更多请参考
tar -zxvf FileName.tar.gztar -jxvf FileName.tar.bz2解压缩

第二步:如何编译,用到哪些命令,编译目标文件是什么

模拟器

开始编译

source build/envsetup.sh
// 进行清除操作,以避免之前进行的build干扰到接下来的build
make clobber
// 选择编译开发工程师的版本,方便debug
lunch aosp_x86_64-eng
make -j4

编译成功(2小时20分钟)
编译成功
运行模拟器

source build/envsetup.sh
lunch aosp_x86_64-eng
emulator

开启虚拟化

maqi@maqi-virtual-machine:/data/android-8.0.0_r17$ emulator
emulator: WARNING: system partition size adjusted to match image file (2560 MB > 200 MB)

emulator: WARNING: data partition size adjusted to match image file (550 MB > 200 MB)

emulator: WARNING: encryption is off
emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
Please ensure KVM is properly installed and usable.
CPU acceleration status: KVM requires a CPU that supports vmx or svm

解决方法:
配置
注意
另外上图的配置特别是内存10G 存储300G 能让你避免很多问题

libGL error
原因:libstdc++.so与ubuntun不匹配

mv libstdc++.so.6{,.bak} 
mv libstdc++.so.6.0.18 {,.bak} 
ln -s /usr/lib/libstdc++.so 

so与ubuntun不匹配
解决

最终

nautilus .ls -lmvln -s
gun 查看当前文件夹命令行 查看当前文件夹重命名创建快捷方式(软链接

真机

开始编译

source build/envsetup.sh
// 进行清除操作,以避免之前进行的build干扰到接下来的build
make clobber
// 6p对应的版本
lunch aosp_angler-userdebug
make -j4

各设备编译配置如下
6p对应版本

连接设备
VMware Ubuntu 连接USB,如下主动点击连接
连接设备
编译成功
编译成功

刷机

编译输出路径
echo ${ANDROID_PRODUCT_OUT}
  • 进入 bootloader
adb reboot bootloader
  • 一键刷机
cd ${ANDROID_PRODUCT_OUT}
fastboot flashall -w

方式二

 fastboot erase cache (清理一下)
 fastboot flash boot boot.img (引导,依次刷入几个ROM的关键数据)
 fastboot flash recovery recovery.img (官方RECOVERY)
 fastboot flash system system.img (如果bl radio 不同的话,刷这个就会报错了,如果提示的不是版本不同,那么重刷一下就行,可能是线没插好)
 fastboot flash userdata userdata.img (这个是用户数据,具说不刷的话你原来的数据不丢,没试过,建议刷)
 fastboot flash cache cache.img (缓存,刷下)
 fastboot flash vendor vendor.img (具说是补丁数据,反正要刷)
 fastboot reboot (重启进系统,底包刷写完成,一定要进系统的,不完成设置,后面也是没办法继续刷的)

刷机完成
刷机完成

验证版本
对应的5.170623.007
版本号

第三步:如何修改指定代码并重新安装到手机

挂载
adb remount
修改源代码后只有挂在才能写入system
在这里插入图片描述

案例一
修改默认壁纸

  1. 替换文件
    推荐使用 androidXRef(41毫秒)搜索
    快速搜索在这里插入图片描述使用自定义的custom_wallpaper替换default_wallpaper
frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png
frameworks/base/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png 
  1. 加入索引
    搜索自定义背景
  2. 验证
    看了下打包的framework-res.apkres\drawable-nodpi-v4会自动生成一张default_wallpaper.png(28802560)的高清大图*,
    高清大图
    着实没看懂随即直接重新加一张图,就不折腾了

案例二
修改默认语言

build/make/tools/buildinfo.sh
--  echo "ro.product.locale=$PRODUCT_DEFAULT_LOCALE"
++  echo "ro.product.locale=zh-CN"

语言种类如下
ja-JP, es-PE, en, ja-JP-JP, es-PA, sr-BA, mk, es-GT, ar-AE, no-NO, sq-AL, bg, ar-IQ, ar-YE, hu, pt-PT, el-CY, ar-QA, mk-MK, sv, de-CH, en-US, fi-FI, is, cs, en-MT, sl-SI, sk-SK, it, tr-TR, zh, th, ar-SA, no, en-GB, sr-CS, lt, ro, en-NZ, no-NO-NY, lt-LT, es-NI, nl, ga-IE, fr-BE, es-ES, ar-LB, ko, fr-CA, et-EE, ar-KW, sr-RS, es-US, es-MX, ar-SD, in-ID, ru, lv, es-UY, lv-LV, iw, pt-BR, ar-SY, hr, et, es-DO, fr-CH, hi-IN, es-VE, ar-BH, en-PH, ar-TN, fi, de-AT, es, nl-NL, es-EC, zh-TW, ar-JO, be, is-IS, es-CO, es-CR, es-CL, ar-EG, en-ZA, th-TH, el-GR, it-IT, ca, hu-HU, fr, en-IE, uk-UA, pl-PL, fr-LU, nl-BE, en-IN, ca-ES, ar-MA, es-BO, en-AU, sr, zh-SG, pt, uk, es-SV, ru-RU, ko-KR, vi, ar-DZ, vi-VN, sr-ME, sq, ar-LY, ar, zh-CN, be-BY, zh-HK, ja, iw-IL, bg-BG, in, mt-MT,es-PY, sl, fr-FR, cs-CZ, it-CH, ro-RO, es-PR, en-CA, de-DE, ga, de-LU, de, es-AR, sk, ms-MY, hr-HR, en-SG, da, mt, pl,ar-OM, tr, th-TH-TH, el, ms, sv-SE, da-DK, es-HN

问题一
Framework层代码变更 push 之后为什么不能生效?

参考 :https://www.jianshu.com/p/df79d1dd97b4

刷入framwork

adb root
adb remount
adb push framework /system/  
adb reboot

问题二
Jack-server怎么还没执行完?
解:观察以下文件内容
gedit $HOME/.jack-server/logs/jack-server-0-0.log
执行完标志

第四步:如何阅读源代码

AndroidXRef
Source Insight 3

第五步:如何在Linux环境Coding

内存够玩的话 直接装一个AndroidStudio
AndroidDevTools

第六步:官方刷机操作

  • 工具下载
    https://developer.android.com/studio/releases/platform-tools#downloads
    工具

  • USB连接手机,输入以下命令
    https://source.android.com/docs/setup/build/running#flashing-a-device

C:\Users\05878mq>adb reboot bootloader
C:\Users\05878mq>fastboot devices
8XV7N16125004864        fastboot
bootloader
bootloader
  • 下载刷机包
    https://source.android.com/source/build-numbers#platform-code-names-versions-api-levels-and-ndk-releases
    版本编号
    • 找到对应版本
      | ![下载地址](https://img-blog.csdnimg.cn/7d1dfc4ad5a443ef9651f53770283b86.png)

    • 内容简介
      内容简介

  • 双击flash-all.bat
    大概两分钟,手机就会自动重启了
@ECHO OFF
:: Copyright 2012 The Android Open Source Project
::
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
::
::      http://www.apache.org/licenses/LICENSE-2.0
::
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.

PATH=%PATH%;"%SYSTEMROOT%\System32"
fastboot flash bootloader bootloader-angler-angler-03.75.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash radio radio-angler-angler-03.84.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot -w update image-angler-opr5.170623.007.zip

echo Press any key to exit...
pause >nul
exit

  • 6.脚本内容
刷入bootloader
fastboot flash bootloader bootloader-angler-angler-03.54.img

重启进入bootloader
fastboot reboot-bootloader

刷入射频
fastboot flash radio radio-angler-angler-03.61.img 

重启进入bootloader
fastboot reboot-bootloader 

刷入boot cache recovery system userdata vendor 
fastboot -w update image-angler-opr5.170623.007.zip

相关文章:

  • 高端手机市场的诸神之战,vivo举起一把“雷神之锤”
  • 简单的ajax任务:get和post方式提交前端用户输入信息给服务器
  • Qt5开发从入门到精通——第四篇(调色板)
  • MySQL数据库如何线上修改表结构
  • Python利用pandas获取每行最大值和最小值
  • C++设计模式之装饰者模式(结构型模式)
  • 数据结构中,索引存储和散列存储区别较为详细的介绍
  • 基于ssm+vue的邮票收藏鉴赏系统 elementui
  • 去中心化标志符在DID中的核心地位
  • C++设计模式之适配器模式(结构型模式)
  • 3-面试官:说说线程池的 7 大参数
  • 猿创征文|HCIE-Security Day50:网络攻击介绍
  • 一个基于NetCore开发的前后端分离CMS系统
  • centos7安装docker和docker-compose
  • 子查询与内联结分别应该怎么写?
  • 0x05 Python数据分析,Anaconda八斩刀
  • CentOS 7 防火墙操作
  • CSS实用技巧
  • ERLANG 网工修炼笔记 ---- UDP
  • Javascript设计模式学习之Observer(观察者)模式
  • JS题目及答案整理
  • MQ框架的比较
  • python大佬养成计划----difflib模块
  • Python进阶细节
  • React16时代,该用什么姿势写 React ?
  • spring boot下thymeleaf全局静态变量配置
  • yii2权限控制rbac之rule详细讲解
  • 测试如何在敏捷团队中工作?
  • 订阅Forge Viewer所有的事件
  • 分布式任务队列Celery
  • 关于for循环的简单归纳
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 三栏布局总结
  • 使用 Docker 部署 Spring Boot项目
  • 移动端解决方案学习记录
  • 用element的upload组件实现多图片上传和压缩
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #pragma预处理命令
  • (3)llvm ir转换过程
  • (Forward) Music Player: From UI Proposal to Code
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (简单) HDU 2612 Find a way,BFS。
  • (三) diretfbrc详解
  • (转)四层和七层负载均衡的区别
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • **python多态
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 8.0 中有哪些新的变化?
  • .NET Remoting学习笔记(三)信道
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args