zoukankan      html  css  js  c++  java
  • Android ROM开发ubuntu下载、编译CyanogenMod7

        CyanogenMod是一个开源的基于Android操作系统,也就是大家经常刷机用的CM,至于如何刷机以及如何编译google原生的Android。

    可以参考我的iteye博客:http://hualang.iteye.com/admin/categories/166795

    在此,有意个建议。如果是做Android开发的最好还是用google亲生的手机作为测试机(nexus one、nexus s、nexus prime),因为这些机型不仅性能强大,支持原生操作系统,还支持很多其他机型目前还没有的功能(比如我的HTC desire z不支持NFC),另外如果想刷机也可以找到n个版本。而其他机型总是存在这样那样的问题,做开发遇到基于其他机型的问题时也难以找到合适的答案,闲话不说了。

    我博文是关于如何下载、编译CyanogenMod,以及如何自定义自己的ROM系列,比如我们比较熟悉的小米手机的MIUI就是基于CyanogenMod。但是因为自己换了不同手机,所以以前基于Nexus S的一些操作不适合于现在的机型了,但是大概流程是一样的。在这里最最麻烦的不是下载源码,而是--编译CyanogenMod。各种各样的问题,每一次编译都要至少1、2个小时,我话费了5天来编译源码,期间遇到各种各样的问题,随着一点一点的查询也逐个的解决了,今天终于编译成功、刷机成功了。

    机型:HTC desire z(HTC vision)

    Android源码:CyanogenMod 7(下载的最新的CM源码2.3.7编译还有问题,所以用的是稍微老一点2.3.4的)

    电脑:Thinkpad 32位

    系统:Ubuntu 10.10

    问题解决:如果你的机型不是这个,编译的源码版本也不是这个,遇到问题最好还是去外面查查(程序员必备技术,你们懂得),下面是一些对你有帮助的网站

     1、CyanogenMod Wiki。可以根据上面的教程来下载并编译适合你机型的CM

    http://wiki.cyanogenmod.com/wiki/Main_Page

    2、XDA Developer。遇到技术问题多上上面问,大牛很多

    http://forum.xda-developers.com/index.php

    3、github:如果你编译时缺少某些包,可以到上面找找看

    https://github.com/koush

    4、CyanogenMod官网,用于下载ROM

    http://www.cyanogenmod.com(被墙了,so...)

    在开始之前你需要root你的手机,在www.cyanogenmod.com里找到针对你的机型的ROM下载并刷机。(国内这段时间墙了,so...)

    有关刷机、root等可以到我的iteye博客中找到,也可以到MIUI官网找一些关于刷机的教程

    http://hualang.iteye.com/admin/categories/166795

    下面开始具体的步骤

    1、安装软件

    首先需要你安装并配置好Android环境,这个不解释

    For 32-bit & 64-bit systems:

    sudo apt-get install 下面软件列表(如果某些安装有问题,最好一个一个的下载安装)

    git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool

    For 64-bit only systems:

    g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib
    NOTE: gcc-4.3-multilib g++-4.3-multilib is no longer available for Ubuntu 11.04 64-bit, but should still build without issue.
    NOTE:On Ubuntu 10.10, and variants, you need to enable the parter repository to install sun-java6-jdk:
    add-apt-repository "deb http://archive.canonical.com/ maverick partner"

    Download RomManager

    2、创建目录

    在终端中输入下列命令下载并执行repo

    创建一个目录,用于存放源代码

              $mkdir -p cyanogenmod

              $mkdir -p bin

    3、初始化下载库

    在终端中输入下列命令下载并执行repo:

    $curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
    $chmod a+x ~/bin/repo
    注意:你需要重启电脑来使其生效

    $chmod a+x ~/bin/repo

    4、下载CyanogenMod源码

    在终端中输入下列命令下载并执行repo:

    现在输入下列命令来初始化版本库:

    $cd ~/cyanogenmod
    $repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
    $repo sync
    或者repo sync -j16(-jn中的n表示打开的网络连接数,开启多个网络连接可以加速下载速度)
    出现如下的状态就表示下载完成了(耗时教长,我用的是4M带宽下了3个小时,大小4G多)

    5、获取属性文件

    此时需要将手机通过USB连接到Ubuntu上。如果一开始不知别手机设备的话,可以参考http://www.cnblogs.com/loulijun/archive/2012/01/10/2318316.html来解决

    然后在终端中输入

              $adb devices

    如果显示如下错误的话,可以通过如下命令来解决(以后再遇到就用这种方式解决就是了)

             $sudo adb kill-server

             $sudo adb devices

    $cd ~/cyanogenmod/device/htc/vision/
    $./extract-files.sh
    NOTE: 注意,如果你获取文件的时候缺少某些如照相机或radio等文件时,你可以到上面的网站找找是否你需要的文件

    6、下载 RomManager

    $cd ~/android/system/vendor/cyanogen/
    $./get-rommanager

    7、编译CyanogenMod

    编译源码

    编译源码之前,因为源码默认设置是在64位机编译的,所以你需要修改其为32位即可

    ------------------------------64位改为32位方法-----------------------------------------------------

    build/core/main.mk:73: You are attempting to build on a 32-bit system.
    build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.
    是因为cm默认只支持64-bit,而我的计算机是32位的,所以需要修改一些文件即可

    ./external/clearsilver/cgi/Android.mk 
    ./external/clearsilver/java-jni/Android.mk 
    ./external/clearsilver/util/Android.mk 
    ./external/clearsilver/cs/Android.mk
    4个文件中的

    LOCAL_CFLAGS += -m64
    LOCAL_LDFLAGS += -m64 
    

    注释掉,或者将“64”换成“32”

    LOCAL_CFLAGS += -m32
    LOCAL_LDFLAGS += -m32 
    

    然后,将./build/core/main.mk 中的
    ifneq (64,$(findstring 64,$(build_arch))) 
    改为:
    ifneq (i686,$(findstring i686,$(build_arch)))

    这样,32位的计算机也可以正常编译了

    NOTE:最新版本的CM源码没有ifneq(64...)这部分,所以就不许要改了

    -----------------------------------------------------------------------------------------------------------

    $. build/envsetup.sh && brunch vision
    编译成功后

    8、刷机

    正常情况下可以刷成功,刷机教程看上面

    9、编译期间遇到的问题

    (1)执行.extract-files.sh如果获取手机的属性文件缺少的话,如下图。可以到

    https://github.com/koush/proprietary_vendor_htc/tree/gingerbread/vision/proprietary

    上寻找你缺少的文件,下载后放到

    /home/loulijun/cyanogenmod/vendor/htc/vision/proprietary下即可


    (2)undefined reference to 'msm_device_mute'、libaudio.so错误

    这种错误网上的有些方法依然不能解决,我是换了从cm2.3.7最新的源码为cm2.3.4的。或者关闭audio的编译选项,可以到vendor和device下找到相应的mk文件将设置audio的true设置为false

    (3)undefined reference to 'HAL_getCameraInfo'、libcameraservice错误

    解决办法:

    $cd /cyanogenmod/device/htc/vision

    $vim BoardConfig.mk

    将BOARD_USE_FROYO_LIBCAMERA := false(设置为false)

    $cd /cyanogenmod/vendor/htc/vision/

    $vim BoardConfigVendor.mk

    将USE_CAMERA_STUB设置为false(这样编译就好了)

    另外还可以参考

    http://forum.xda-developers.com/showthread.php?t=899674

    里面有解决camera问题的方法(如果上述不奏效的话),不过上面是基于nexus one的,原理一样

  • 相关阅读:
    Cooperate with Myself
    A brief introduction of myself
    计算1+11+111+1111+........
    Jav实现F(n)=F(n-1)+F(n-2)+.....+F(1)+1
    查找二维数组中是否有符合的目标值
    排序算法
    时间复杂度
    Java代码实现单例模式
    查找一个字符串中重复出现字符的个数
    null,“”,empty的区别
  • 原文地址:https://www.cnblogs.com/loulijun/p/2361533.html
Copyright © 2011-2022 走看看