如果你想自己编译CM11.0,如果你想刷第三方ROM,那么我将在这篇文章带你一起探讨。也许这篇文章有点偏向与纯技术方面的经验,但对于大家对android编译原理及刷机还是很有帮助的。对于刷机教程那块网上相关资料也很多,我仅点到为止,我相信有兴趣的GG&MM参考本经验可使你少走很多弯路。以下经验本人亲自编译验证,我也希望大家喜欢在自己手机刷上自己编译定制的ROM。

工具/原料

  • 一台带SSD硬盘高配置电脑,Ubuntu 12.04 64位Server版。(或使用windows下的虚拟机运行ubuntu)。
  • 20M光钎Internet连接,实际网速得2M以上最好。因为设置过程中需要下载30G左右的数据。
  • 一部手机,作者使用的Samsung-I9300。
  • 需对刷机\LINUX操作\安卓系统比较熟悉,太过小白的不建议自己编译。

方法/步骤---基于Samsung平台CM11.0编译ROM

  1. 1

    一、环境搭建

    1.1 安装JDK和Toolchain

    先把prebuilt-2b5cdec. tar.gz和jdk-6u26-linux-x64.bin拷贝到用户的Home目录.

    cd /opt

    sudo tar xvf ~/prebuilt-2b5cdec.tar.gz

    sudo mv prebuilt-2b5cdec arm-eabi-4.4.3

    chmod +x ~/jdk-6u26-linux-x64.bin

    sudo ~/jdk-6u26-linux-x64.bin

    1.2 安装MTK Android编译环境

    sudo apt-get update        #更新一下软件仓库列表

    sudo apt-get install git-core gnupg flex bison gperf build-essential \

    zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \

    x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev \

    libgl1-mesa-dev gcc-4.4 g++-4.4 gcc-4.4-multilib \

    g++-4.4-multilib mingw32 tofrodos python-markdown \

    libxml2-utils xsltproc wine

    sudo rm /bin/sh

    sudo ln -s /bin/bash /bin/sh #修改default sh link to bash

    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

    sudo update-alternatives --config gcc

    sudo update-alternatives --config g++

    1.3 完善JDK配置:

    sudo update-alternatives --install /usr/bin/java java /opt/jdk1.6.0_26/bin/java 300

    sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.6.0_26/bin/javac 300

    sudo update-alternatives --install /usr/bin/javah javah /opt/jdk1.6.0_26/bin/javah 300

    sudo update-alternatives --install /usr/bin/javap javap /opt/jdk1.6.0_26/bin/javap 300

    sudo update-alternatives --install /usr/bin/jar jar /opt/jdk1.6.0_26/bin/jar 300

    sudo update-alternatives --install /usr/bin/javadoc javadoc /opt/jdk1.6.0_26/bin/javadoc 300

    验证:

    sw06@sw06:/home/data/work$ java -version

    java version "1.6.0_26"

    Java(TM) SE Runtime Environment (build 1.6.0_26-b03)

    Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

    1.4 安装Repo功能

    在下载之前配置下hosts服务

    sw06@sw06:/home/data/work$ sudo vim /etc/hosts

    74.125.31.82    android.googlesource.com

    74.125.31.82    www.googlesource.com

    203.208.46.172  cache.pack.google.com

    59.24.3.173     cache.pack.google.com

    通过一下命令安装 "repo" 工具,注意安装路径的权限,可能需要修改相关文件夹权限。

    curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

    chmod a+x ~/bin/repo

    提示:你可能需要重启电脑才能生效。

  2. 2

    二、下载源码并编译

    2.1 新建目录

    sw06@sw06:/home/data/work $ mkdir -p cmandroid

    cd cmandroid

    2.2通过repo下载CM-11.0最新源码

    sudo repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0

    $ repo sync

    等待下载……

    下载过程很长,并且还有下载一半中断的情况,多下几次,确保下载完成,硬盘要准备足够大。大概20G。

    sw06@sw06:/home/data/work/test/cmandroid$ du -sc

    21853416        .

    21853416        total

    如果下载过程中报错,修改/.repo/local_manifests/ local_manifest.xml 文件如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <manifest>

    <project name="CyanogenMod/android_device_samsung_i9300" path="device/samsung/i9300" remote="github" />

    <project name="CyanogenMod/android_device_samsung_smdk4412-common" path="device/samsung/smdk4412-common" remote="github" />

    <project name="CyanogenMod/android_kernel_samsung_smdk4412" path="kernel/samsung/smdk4412" remote="github" />

    <project name="CyanogenMod/android_packages_apps_SamsungServiceMode" path="packages/apps/SamsungServiceMode" remote="github" />

    <project name="CyanogenMod/android_hardware_samsung" path="hardware/samsung" remote="github" />

    </manifest>

    2.3 get-prebuilts

    $ cd cmandroid /vendor/cm

    $ sudo ./ get-prebuilts  //(这一步是为了下载Term.apk并解压到当前propritary目录) (只需执行一次,以后编译无需执行)

    2.4 breakfast i9300

    $ source build/envsetup.sh

    $ breakfast i9300

    //(这一步会自动从github下载   三星I9300设备的驱动和内核; 注意必须是CM官方支持升级到cm11.0的设备才能使用这个命令下载到//内核和驱动!!!) (只需执行一次,以后编译无需执行)

    错误1:

    不要想着这两个命令了,由于网络原因,breakfast这个命令基本上是行不通的。这步会报错, 因为找不到device i9300。

    解决办法:

    直接到

    https://github.com/CyanogenMod/android_device_samsung_i9300 https://github.com/CyanogenMod/android_device_samsung_smdk4412-common

    下载后解压到 /device/samsung/i9300和/device/samsung/smdk4412-common

    git clone https://github.com/CyanogenMod/android_device_samsung_i9300 -b cm-11.0

    其它设备可以参考

    https://github.com/CyanogenMod/android_device_samsung_设备名 从github上下载。

    手机上刷9300  cm11.0的rom 并连接上手机,之前要安装android sdk,

    错误2:

    IOError: [Errno 13] Permission denied: '.repo/local_manifests/roomservice.xml'

    build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/i9300/cm.mk]]: "vendor/samsung/smdk4412-common/common-vendor.mk" does not exist.  Stop.

    ** Don't have a product spec for: 'cm_i9300'

    ** Do you have the right repo manifest?

    解决办法:主要是修改文件权限chmod 664 .repo/local_manifests/roomservice.xml

    错误3:

    urllib2.HTTPError: HTTP Error 403: Forbidden

    build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/i9300/cm.mk]]: "vendor/samsung/smdk4412-common/common-vendor.mk" does not exist.  Stop.

    解决办法:

    手动下载proprietary_vendor_samsung,copy文件夹i9300和 smdk4412-common到vendor/samsung/目录下。

    2.5 extract-files.sh

    cd ~/ home/data/work/cmandroid/device/samsung/i9300

    chmod a+x extract-files.sh

    $ sudo ./extract-files.sh

    首先连接好samsung S3手机,然后来到 /device/samsung/i9300 这个目录下,执行上面的指令。 这个脚本的主要作用是将手机中的驱动so库pull出来,然后新建 /vendor/samsung/i9300这个目录,然后在里面放相应的库文件。

    ok,执行,首先报错。

    错误1:

    build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/n8000/cm.mk]]: "device/samsung/n80xx-common/n80xx-common.mk" does not exist。 停止。

    ** Don't have a product spec for: 'cm_n8000'

    ** Do you have the right repo manifest?

    解决方法:

    https://github.com/CyanogenMod/android_device_samsung_smdk4412-common

    这里面将 n80xx-common 驱动包下载下来,放到/device/samsung/smdk4412-common

    这个目录下,这个目录本身是没有的,需要新建。

    chmod +x  android-cm-10.2/device/samsung/smdk4412-common/extract-files.sh

    继续执行 ./extract-files.sh 这个命令

    错误2:

    remote object '/system/vendor/lib/libWVStreamControlAPI_L1.so' does not exist

    remote object '/system/vendor/lib/libwvdrm_L1.so' does not exist

    618 KB/s (58560 bytes in 0.092s)

    解决办法:

    可以直接将/device/samsung/smdk4412-common/下的东东拷贝到/vendor/samsung/ smdk4412-common/proprietary/system/目录下;将/device/samsung/i9300/下的东东拷贝到/vendor/samsung/ i9300/proprietary/system/目录下;

    错误3:

    remote object '/sbin/cbd' does not exist remote object '/system/bin/bcm4330B1_murata.hcd' does not exist remote object '/system/bin/bcm4330B1_semcosh.hcd' does not exist remote object '/system/etc/wifi/bcmdhd_apsta.bin' does not exist remote object '/system/etc/wifi/bcmdhd_mfg.bin' does not exist remote object '/system/etc/wifi/bcmdhd_p2p.bin' does not exist remote object '/system/etc/wifi/bcmdhd_sta.bin' does not exist remote object '/system/lib/libfactoryutil.so' does not exist remote object '/system/lib/libomission_avoidance.so' does not exist remote object '/system/lib/libsecnativefeature.so' does not exist

    关于错误3 有两种解决方法,第一种是从

    https://github.com/DonkeyCoyote/proprietary_vendor_samsung

    链接下面的文件包含了目前三星设备绝大部分的device驱动包。

    下载到驱动包,然后将缺少的so adb push到手机里面,然后再./extract-files.sh出来,另外一种是 直接拷贝到相应的 /vendor/samsung/ 目录下,第二种比较方便,但是可能需要自己新建文件夹,第一种比较自动化,也不容易错误。

    2.6真正编译

    前面工作主要是为编译打好基础,进行编译平台的配置,然后可以开始按照官方文档进行编译了。

    $ export USE_CCACHE=1

    $ croot

    $ brunch i9300

    不幸的是,编译会报错:

    错误1:

    build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/n8000/cm.mk]]: "hardware/samsung/exynos4x12.mk" does not exist。 停止。

    ** Don't have a product spec for: 'cm_n8000'

    ** Do you have the right repo manifest?

    No such item in brunch menu. Try 'breakfast'

    解决办法:缺少samsung硬件基础库。

    https://github.com/CyanogenMod/android_hardware_samsung  下载后将里面的文件替换到 hardware/samsung/下面。

    错误2:

    Export includes file: external/sepolicy/tools/Android.mk -- /sda5-194G-data/android-cm-10.2/out/host/linux-x86/obj/EXECUTABLES/checkseapp_intermediates/export_includes

    Notice file: external/sepolicy/NOTICE -- /sda5-194G-data/android-cm-10.2/out/target/product/n8000/obj/NOTICE_FILES/src//root/seapp_contexts.txt

    make: *** 没有规则可以创建“/sda5-194G-data/android-cm-10.2/out/target/product/n8000/root/sbin/cbd”需要的目标“vendor/samsung/smdk4412-common/proprietary/sbin/cbd”。 停止。

    make: *** 正在等待未完成的任务....

    Notice file: external/sepolicy/NOTICE -- /sda5-194G-data/android-cm-10.2/out/target/product/n8000/obj/NOTICE_FILES/src//root/sepolicy.txt

    解决办法: 从那个https://github.com/DonkeyCoyote/proprietary_vendor_samsung

    下载的proprietary_vendor_samsung-android-4.3/smdk4412-common/proprietary/sbin/cbd

    目录下找找cbd,copy到指定目录。这里最好是把system目录下的东西也都替换掉。

    错误3:

    /usr/bin/ld: cannot open output file external/powertop/csstoh: Permission denied

    collect2: ld returned 1 exit status

    target Generated: libart <= art/runtime/thread.h

    make: *** [external/powertop/css.h] Error 1

    make: *** Waiting for unfinished jobs....

    解决办法:

    修改external/powertop目录权限:chmod 775 external/powertop

  3. 3

    三、编译完成和下载

    开始真正的编译,大概3个小时左右编译完成。

    可以看到编译后包:out/target/product/i9300/cm-11-20140505-UNOFFICIAL-i9300.zip

    END

方法/步骤--- SAMSUNG I9300之CM ROM刷机教程

  1. I9300刷机教程之4个文件

    三星USB驱动—SAMSUNG_USB_Driver_for_Mobile_Phones.exe

    Odin 3.07.rar—刷机平台,解压后先放着

    CF-SGS3-CWM-v5.5-v1.2.tar—这个文件别解压,文件后缀是tar,我们用它来刷recovery分区

    root.zip—获取root的命令和安装包

  2. I9300刷机教程之关机,开始刷recovery

    1、打开Odin3,此时你的手机先不要连接USB;

    2、点击软件内的PDA,把下载的CF-SGS3-CWM-v5.5-v1.2.tar选上;

    3、检查下左侧的一些配置:勾选“自动重启”、“复位时间”两项;点击PDA按钮,选择从刚才下载后解压出来的recovery文件,文件是tar格式的;CF-SGS3-CWM-v5.5-v1.2.tar。如图:

    4、手机先关机状态,然后同时按住音量下+Home键+电源键;

    5、这时你看到一个警告,选择continue,按一下音量上键;

    6、插入你的手机,然后点开始刷机;7、成功后重启了,恭喜你,你完成了第一步。

  3. I9300刷机教程之root

    如果是第一次刷机,官方系统是没法用网上一键ROOT工具进行ROOT的,作者是按照如下方式进行的:

    1、手机先关机. 按住音量加+Home键+电源键, 一秒后放开电源键,这时recovery就成功加载了

    2、选择"install zip from sdcard",选择你下载好的root.zip;

    3、成功后,重启你的手机.

  4. I9300刷机教程之真正刷机

    我们在手机关机的状态下同时按“音量+ + HOME键 + 电源键开机”,这是就可以进入到手机的Recovery系统中了。一般的刷机需要首先双WIPE手机。选择从内部存储介质中安装ZIP刷机包,找到我们拷贝进去的刷机包,按动音量+—进行光标移动,按动电源键就可以进行刷机了。

    按如下图示,就可以完成刷机了。

    END

注意事项

  • 如果编译Android4.4不能用OpenJDK,必须用Oracle JDK1.6,1.7目前是不支持的。
  • 如果是第一次刷机,必须通过在Recovery模式下进行ROOT。
  • 刷机有风险,最好在有一定经验的朋友指导下进行。如果对大家有帮助,请给予支持。

基于Samsung平台CM11.0编译ROM及刷机全过程相关推荐

  1. 小米2s刷原生安卓_小米2S升级安卓5.0原生ROM下载刷机教程

    昨天双11,小米天猫旗舰店半天时间交易额就突破10亿大关,今天就来给大家发福利了,继前几日"小米3/小米4MIUI6稳定版正式发布下载"(地址:http://www.jikeji. ...

  2. 玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示fastboot刷机

    玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示fastboot刷机 本节主要内容: Pixel 3通过fastboot方式刷入Android 11.0官方工厂镜像 Pix ...

  3. Ubuntu20.4环境下,Android11(R)源码,下载,编译,Pixel4刷机

    Ubuntu20.04.2LTS 环境下,Android11(R)版本源码下载,编译,Pixel4刷机 前言:前段时间为了给Pixel4刷机,下载源码.编译.刷机,踩了无数个坑,也花了很多时间,在这里 ...

  4. 【小米5】MIUI 9 MIUI 10 官方ROM历史刷机包汇总

    [小米5]MIUI 9 官方ROM历史刷机包汇总 发表在玩机教程2017-08-30 13:37:44 来自PC复制链接手机看帖53934916 http://bbs.xiaomi.cn/t-2474 ...

  5. 玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示recovery刷机

    玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示recovery刷机 本节主要内容: Pixel 3通过fastboot方式刷入Android 11.0官方工厂镜像 Pix ...

  6. 转:三星安卓手机刷机包(ROM)刷机教程与ROOT教程总索引

    三星安卓手机刷机包(ROM)刷机教程与ROOT教程总索引  [复制链接]     admin 管理员 串个门 加好友 打招呼 发消息 电梯直达 楼主  发表于 2012-1-10 16:14:22 | ...

  7. 华为手机刷linux系统,华为Harmony OS 2.0手机Beta版刷机包流出:电脑助手一键刷入/手动...

    原标题:华为 Harmony OS 2.0 手机 Beta 版刷机包流出,Mate 30 Pro 可用(附下载地址) 月24日消息 IT360 论坛今日放出了三款 Mate 30 Pro 机型的华为鸿 ...

  8. Android11vivox21刷机包,vivo x21旧版官方固件rom系统刷机包

    这是vivo x21旧版官方固件rom系统刷机包,可以做备用,降级可用!!vivo x21已经提示更新了,如果你的手机更新之后系统没有之前好用的,可以选择降级用,直接完整版的固件rom包下载,解压出来 ...

  9. nexus5 android 7.0,Android 7.0 Nougat正式版刷机教程—nexus5X

    Android 7.0正式版发布已经有一段时间,手上有nexus设备的童鞋不知道更新了最新系统没有,反正我的nexus 5x 6.0的系统是始终没有收到7.0的OTA升级推送,无奈,只有自己动手,丰衣 ...

最新文章

  1. asp.net webform 复制窗体代码_逆向分析流氓软件自我复制以及防御思路
  2. mvc学习-编辑提交需要注意-mvc重点
  3. android studio 首字母提示 设置 大小写敏感
  4. c语言ascii图形输出,C语言实例10——有关ASCII图形的输出
  5. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform
  6. 平面图转对偶图19_03_21校内训练 [Everfeel]
  7. HDU 1223 还是畅通工程(最小生成树prim模板)
  8. linux 软链接_Linux软连接和硬链接
  9. WSPSRV.EXE错误导致ISA中断
  10. 科大讯飞2017年报:营收54亿利润5.9亿,政府补助1.18亿
  11. 若有下列共用体定义_练习题-第十章 结构体与共用体(有答案)
  12. java二维数组冷知识
  13. wampserver修改默认根目录
  14. 解决 手心输入法 导致 Navicat 闪退问题
  15. 邮箱超大附件最大是多少?什么邮箱能发超大附件?
  16. JavaScript中this的指向总结
  17. 程序员必读:摸清hash表的脾性
  18. 洛谷P4238 多项式乘法逆元
  19. 好工具推荐系列:Windows系统查看各个进程/网速/CPU的软件(查看系统资源工具)
  20. c语言数组越界也太难了吧,跨函数越界啥意思?

热门文章

  1. 【社招】招聘高级多媒体工程师-一家拥有15亿用户量的出海互联网企业
  2. PHP 生成下载地址例如迅雷下载
  3. APP的UI设计趋势与巧妙使用(二)
  4. vue导出横版pdf并解决内容分割问题
  5. 如何将heic图片格式转换jpg?
  6. NB-IOT 无线电流传感器 设备状态监测 微功耗测控终端 无线电量传感器功率 变送器电机监控
  7. 新一代经济型加密狗——超级狗
  8. 检查ESXi主机是否使能VT-x/AMD-V
  9. fx系列微型可编程控制器 通信_三菱Q系列和FX系列的PLC有什么区别?
  10. 微信支付提示:同一笔交易不能多次提交