• 编译Android系统源码和内核源码

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,但是我说句真心话,那些只能提供参考,因为你的工作环境毕竟和他不一样,所以等你按照他的步骤去操作的时候还是会遇到很多问题,当然我写这篇文章也不是说我的方法就是一定可以的,我只能说我是成功了,所以我只是想记录一下,以后可以进行翻阅查看,主要的还是要看自己的毅力和解决问题的能力了,好了不多说了,说正事吧~~


    首先我们来看一下编译Android系统源码

    第一:我们知道Android系统是基于Linux开发的,所以我们想编译Android系统源码的话,就必须有一个Linux系统,这里我使用了Ubuntu 64位的系统,这个镜像文件的下载地址是:

    http://pan.baidu.com/s/1c0eUSYc

    安装Ubuntu系统不用说了吧,这种问题网上的资料多得很,因为篇幅可能很长,所以如果真的需要的话,请留言~~


    问题一:至于我为什么要使用64位系统,因为在后面我会遇到一个问题,就是我第一次安装的是32位的系统,结果在编译的过程中遇到一个问题就是:

    ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-ar only run on 64-bit linux

    编译不通过的,我就在网上找答案,下面的这篇文章就是说怎么解决上的问题,主要就是修改一些指定的文件

    http://blog.sina.com.cn/s/blog_76dbbd7e01018cm5.html

    但是很悲剧的是:我按照他的方法操作,并没有成功,那怎么办呢?我最后选择了重装了一个64位的系统,但是这次就没有用虚拟机了,直接安装到电脑中的。


    问题二:安装的时候我先后卸载在安装系统有好几次,主要原因是第一次编译没经验,开始的时候就分配了20G的空间,结果编译的时候傻了,完全不够,所以我直截了当将电脑的200G的空间都分配出去了


    那么安装系统完之后,还有一个问题,当我再去使用同一个方式去下载Android源码的时候,发现总是连接不上了,感觉Google退出中国了,源码也很难下到了,中间只有大约一个月的时间,就不可以下载了,好假,尝试过各种方法,我还买VPN,结果还是不行,那么怎么办呢?之前是有源码的,但是在虚拟机中,这时候就需要将虚拟机中的源码拷贝出来了,那么怎么从虚拟机中拷贝文件呢?这个很简单的,我用的VM的,他能够设置共享文件夹(具体方法可以搜索一下),但是又有一个问题来了,当时在虚拟机中下载的是Android4.4源码,大约有18G,我就尝试拷贝了,结果发现电脑最好拷贝死机了,主要是因为小文件太多了,大约有60万个,电脑配置也不好,所以尝试了几次都是死机了,那拷贝不出来怎么办呢?问题都是得解决的,突然想到了压缩一下在拷贝:

    http://blog.csdn.net/jiangwei0910410003/article/details/37997899

    通过上面的一篇文章中,压缩拷贝,结果发现效果很不错,而且压缩也是很快的,这下拷贝就顺利了

    至此我们解决了系统问题和源码问题


    注意:这里所说的源码问题不是指下载源码的问题,我会在最后面说一下现在如何能够得到相应的Android源码,反正从google上去下载我是不相信了。所以我提供了我已经下载好并且打成压缩包的连接,

    http://pan.baidu.com/s/1mgoNVGs


    只需要进行解压即可,关于解压缩Linux文件的话,可以查看另外一篇blog:

    http://blog.csdn.net/jiangwei0910410003/article/details/37997899


    上面的前奏都做好了,下面就来进行编译操作

    第一步:在此之前还需要安装一些辅助工具,防止在安装的时候提示错误,当然我们可以现在不安装,等到安装的时候会提示相应的错误,到时候我只需要针对性的去安装,但是那样在编译的过程中会很不爽的,所以我还是先把这些工作做了

    首先需要安装JDK,请转战另外的一篇Blog:

    http://blog.csdn.net/jiangwei0910410003/article/details/37996723


    当JDK安装完毕之后,下面就需要来安装一下编译库了:

    sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev 
    sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential  
    sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libs libncurses5-dev

    当然这些是必须要安装的,但是不是一定在编译的时候就没有问题,所以我们在编译的时候遇到什么问题的时候我们再去进行解决


    今天在Ubuntu11.04(64位)编译Android2.3源码时,遇到各种各样的问题。不是缺这个,就是少那个。现把这些问题和解决方法罗列出来,供大家参考

    普遍错误:
    1.错误:
    /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
    make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1
    解决:
    sudo apt-get install libc6-dev-i386 

    2.错误:
    make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp] error 1
    解决:
    sudo apt-get install g++-multilib 

    3.错误:
    external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No such file or directory
    compilation terminated.
    make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_cgi_intermediates/cgi.o] Error 1
    解决:
    sudo apt-get install zlib1g-dev

    4.错误:
    /usr/bin/ld: cannot find -lz
    collect2: ld returned 1 exit status
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1
    解决:
    sudo apt-get install lib32z1-dev

    5.错误:

    bison -d  -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
    /bin/bash: bison: command not found
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127
    解决:
    sudo apt-get install bison

    6.错误:
    Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
    /bin/bash: flex: command not found
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127
    解决:
    sudo apt-get install flex

    7.错误:
    /usr/bin/ld: cannot find -lncurses
    collect2: ld returned 1 exit status
    make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1
    解决:
    sudo apt-get install lib32ncurses5-dev

    8.错误:
    prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55: fatal error: X11/Xlib.h: No such file or directory
    compilation terminated.
    make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/main-common.o] Error 1
    解决:
    sudo apt-get install libx11-dev 

    9.错误:
    sh: gperf: not found
    calling gperf failed: 32512 at ./makeprop.pl line 96.
    make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h] Error 25
    make: *** Deleting file out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h'
    解决:
    sudo apt-get install gperf
    From:http://blog.csdn.net/offbye/article/details/6834285

    以上的错误总结参考:
    http://www.360doc.com/content/12/0602/16/6828497_215429231.shtml


    致命错误: bits/predefs.h:没有那个文件或目录 编译中断

    解决方法:
    sudo apt-get install gcc-multilib

    参考:
    http://blog.sina.com.cn/s/blog_6340cd9c0101e42h.html

    还有一个原因:

    Ubuntu 11.10以上的gcc版本是4.6.1,版本太高,编译android时出错,要把gcc版本改为4.4.3

    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4

    参考:http://blog.163.com/zhaolin53636848@126/blog/static/4908666820121993234837/


    总结错误:

    1.错误

    host Executable: aapt (out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)
    /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz
    /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.a when searching for -lz
    /usr/bin/ld: skipping incompatible //usr/lib/libz.so when searching for -lz
    /usr/bin/ld: skipping incompatible //usr/lib/libz.a when searching for -lz
    /usr/bin/ld: cannot find -lz
    collect2: ld returned 1 exit status
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

    解决办法:

    缺少lib32z1-dev,安装即可:apt-get install lib32z1-dev

    2.错误
    编译时出现 /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory 错误信息
    /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory
    compilation terminated.
    make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error 1
    解决办法:

    缺少libc开发包,安装即可: apt-get install libc6-dev-i386

    3.错误
    Android编译遇到错误/usr/bin/ld: cannot find -lstdc++的解决
    解决办法:

    缺少g++-multilib库,安装即可: apt-get install g++-multilib  

    参考:http://www.mobiletrain.org/lecture/doc/android/2011-04/389.html


    最后发现的一个错误:

    make android 时的 libwebcore.so error

    解决办法:增加文件swap

    参考:
    http://blog.csdn.net/zhoukejun/article/details/4211108

    http://blog.163.com/tod_zhang/blog/static/1025522142013225112338311/


    好吧在这上面的工作都做完了,错误也都解决了,编译也完成了,我是在晚上进行编译的,第二天好了,当看到结果的时候真的很开心:

    Target system fs image:    out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img
    Target ram disk: out/target/product/generic/ramdisk.img
    Target userdata fs image: out/target/product/generic/userdata.img
    Installed file list: out/target/product/generic/installed-files.txt 

    那么下面就运行一下编译的结果吧:

    1. 设置环境变量:
    USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin  
    USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic

    其中,~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。
    2. 运行模拟器。
    USER-NAME@MACHINE-NAME:~/Android$ emulator
    模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
    当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:
    USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img


    但是又来了一个错误:

    emulator: ERROR: You did not specify a virtual device name, and the system
    directory could not be found.
    If you are an Android SDK user, please use '@<name>' or '-avd <name>'
    to start a given virtual device (see -help-avd for details).
    Otherwise, follow the instructions in -help-disk-images to start the emulator

    解决方法:

    进入到Android源码目录中执行:

    source build/envsetup.sh 

    lunch sdk-eng

    然后再执行:

    emulator

    可以启动模拟器

    参考:http://blog.csdn.net/yf210yf/article/details/9206269


    再次运行,好吧有结果了:



    编译完Android源码之后,写还得再来看看如何编译Android内核源码,为什么要编译Android内核源码呢?这个是为了后续的工作做准备,后面会说到的,其实我们上面编译的Android源码他的内核源码Google已经编译好了,存放在:源目录/prebuilt/android-arm/kernel/kernel-qemu;


    下面我们就来看看如何编译内核源码吧,同样如此,想编译内核源码的话,我们需要内核源码,又是一件痛疼的事,网上有很多资源都是说使用goldfish版本的,然后就去:git clone http://android.googlesource.com/kernel/goldfish.git
    反正我是下载失败,原因和下载源码是一样的,google服务器连接失败,那怎么办呢?
    当时我是没有办法了,就去各种搜索,结果有人说goldfish是连接不上了,有人将内核源码放到github上了,地址如下:
    https://github.com/android/kernel_common

    如果下载失败的话,我已经下载好了,可以去以下的连接去下载:

    http://pan.baidu.com/s/1pQzPs


    我就去下载了,大约几百M吧,下载下来之后,就进行编译吧,在编译之前我们需要修改点东西:

    修改文件夹中的Makefile文件中的编译环境

    ARCH ?= (SUBARCH)
    CROSS_COMPILE ?= 

    修改成
    ARCH ?= arm
    CROSS_COMPILE ?= arm-eabi- 

    如图:


    采用的是arm体系结构,交叉编译使用的是arm-eabi-XXX工具,这个值只是个前缀

    下面我们就来编译吧,进入到文件夹中进行编译结果发现,说找不到指定的arm-eabi-gcc工具(这个错误发生在我编译Android4.4版本的时候,因为这个版本的源码中找不到指定的prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录,但是最后编译Android2.3.7版本的话就有了,所以针对于4.4版本没有的话,我们怎么办呢,那还得去网上搜索这个工具,下载地址:
    http://download.csdn.net/download/storeage/4036993),下载下来之后一般是存放到/usr/lib目录中,然后修改一下环境变量,这个可以参考前面配置JDK环境变量的方法


    首先需要:make goldfish_defconfig

    但是找不到指定文件,发现这个文件只在goldfish版本中,而我们下载的是kernel_common,这时候我们可以:

    make menuconfig

    然后选择对应的配置,但是问题又来了,哪些选项是必选的,哪些是不需要选的,反正最后编译总是失败,搞伤的了,所以还是得去找goldfish版本的(我上面之所以介绍了kernel_common版本的,就是记录一下我操作的过程,虽然最后失败了),不过运气挺好的,最后还真的被我找到了,具体的地址我记得不太清楚了,但是我放到网盘了,里面有相应的说明,goldfish下载地址:

    http://pan.baidu.com/s/1qW0TkkO


    下载下来之后,可以编译了,

    make goldfish_defconfig

    然后

    make

    这个编译的过程很快,不到一个小时吧

    OBJCOPY arch/arm/boot/zImage
    Kernel: arch/arm/boot/zImage is ready

    这样就编译成功了,那么我就是用这个内核镜像来启动模拟器吧:


    1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
    USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin
    2. 设置ANDROID_PRODUCT_OUT环境变量:
    USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
    3. 在后台中指定内核文件启动模拟器:
    USER-NAME@MACHINE-NAME:~/Android$  emulator -kernel ./kernel/common/arch/arm/boot/zImage &


    不幸的是模拟器是可以启动但是总是黑屏,而且是用adb shell也连接不上设备,这可怎么办,都快成功了,然后就去网上再次找答案,找到了:原因是我的源码是4.4版本的,2.3版本以后的体系架构是用的是armv7了,所以不是:

    make goldfish_defconfig

    而是

    make goldfish_armv7_defconfig

    再次编译,成功再次是用镜像文件启动模拟器,草,傻眼了,结果还是失败太蛋疼了,然后各种搜索,原因上面的解答,但是我已经修改了,还是不行(这个问题纠结了两个礼拜,我差点就放弃了),最后想是不是源码的问题,也只能这么想了,所以又去晚上找2.3.7的源码,别说着了一天,真是不负有心人呀,还真的被我找到了,而且找到很多个版本,都是压缩包的形式,在这里我真心的要感谢这个人,懂得资源分享,

    Android2.3.7源码下载地址:

    http://pan.baidu.com/s/1eQ9YT6i

    然后我就很兴奋的重新编译了Android2.3.7版本的源码(其实我当时有点担心,因为我现在的系统是64位的,不知道这个源码是多少位的,但是最后编译成功了,这个版本是64位的,也就不需要重新换系统了),因为有了之前的编译过程,好多问题都提前解决了,编译过程中是很顺利的,也是在晚上编译的结果也是成功了,这次我们在通过上面的方式来编译内核,然后启动模拟器,擦,结果可以了:


    成功了,这次是真的成功了,好感动,好激动呀,两次挫折两次激动~~


    总结:其实我们可以回顾一下上面的过程,个人感觉没有任何技术可言,我遇到的最大的问题就是资源获取不到的问题,所以我将使用到的资源都给出了下载链接,同时感觉遇到问题不可以胆怯,要勇敢面对~~

    PS:上面的过程是我成功之后的感想和操作,如果亲们按照我这种方式不成功的话,请留言~~我会帮助看看~~

    注:这篇文章其实没什么内容,但是里面有很多相关资源的下载连接,这个真的很有价值的~~


    《Android应用安全防护和逆向分析》

    点击立即购买:京东  天猫  亚马逊 当当



    更多内容:点击这里

    关注微信公众号,最新技术干货实时推送

    编码美丽技术圈
    微信扫一扫进入我的"技术圈"世界

    扫一扫加小编微信
    添加时请注明:“编码美丽”非常感谢!

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block var foo = 'bar'; 

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt&ThinSpace;. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    gantt
            dateFormat  YYYY-MM-DD
            title Adding GANTT diagram functionality to mermaid
            section 现有任务
            已完成               :done,    des1, 2014-01-06,2014-01-08
            进行中               :active,  des2, 2014-01-09, 3d
            计划一               :         des3, after des2, 5d
            计划二               :         des4, after des3, 5d
    
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 好长时间没有写blog了,之所以没有写,主要还是工作上的事,...就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收

    本文转载自:http://blog.csdn.net/jiangwei0910410003/article/details/37988637/

    好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,但是我说句真心话,那些只能提供参考,因为你的工作环境毕竟和他不一样,所以等你按照他的步骤去操作的时候还是会遇到很多问题,当然我写这篇文章也不是说我的方法就是一定可以的,我只能说我是成功了,所以我只是想记录一下,以后可以进行翻阅查看,主要的还是要看自己的毅力和解决问题的能力了,好了不多说了,说正事吧~~


    首先我们来看一下编译Android系统源码

    第一:我们知道Android系统是基于Linux开发的,所以我们想编译Android系统源码的话,就必须有一个Linux系统,这里我使用了Ubuntu 64位的系统,这个镜像文件的下载地址是:

    http://pan.baidu.com/s/1c0eUSYc

    安装Ubuntu系统不用说了吧,这种问题网上的资料多得很,因为篇幅可能很长,所以如果真的需要的话,请留言~~


    问题一:至于我为什么要使用64位系统,因为在后面我会遇到一个问题,就是我第一次安装的是32位的系统,结果在编译的过程中遇到一个问题就是:

    ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-ar only run on 64-bit linux

    编译不通过的,我就在网上找答案,下面的这篇文章就是说怎么解决上的问题,主要就是修改一些指定的文件

    http://blog.sina.com.cn/s/blog_76dbbd7e01018cm5.html

    但是很悲剧的是:我按照他的方法操作,并没有成功,那怎么办呢?我最后选择了重装了一个64位的系统,但是这次就没有用虚拟机了,直接安装到电脑中的。


    问题二:安装的时候我先后卸载在安装系统有好几次,主要原因是第一次编译没经验,开始的时候就分配了20G的空间,结果编译的时候傻了,完全不够,所以我直截了当将电脑的200G的空间都分配出去了


    那么安装系统完之后,还有一个问题,当我再去使用同一个方式去下载Android源码的时候,发现总是连接不上了,感觉Google退出中国了,源码也很难下到了,中间只有大约一个月的时间,就不可以下载了,好假,尝试过各种方法,我还买VPN,结果还是不行,那么怎么办呢?之前是有源码的,但是在虚拟机中,这时候就需要将虚拟机中的源码拷贝出来了,那么怎么从虚拟机中拷贝文件呢?这个很简单的,我用的VM的,他能够设置共享文件夹(具体方法可以搜索一下),但是又有一个问题来了,当时在虚拟机中下载的是Android4.4源码,大约有18G,我就尝试拷贝了,结果发现电脑最好拷贝死机了,主要是因为小文件太多了,大约有60万个,电脑配置也不好,所以尝试了几次都是死机了,那拷贝不出来怎么办呢?问题都是得解决的,突然想到了压缩一下在拷贝:

    http://blog.csdn.net/jiangwei0910410003/article/details/37997899

    通过上面的一篇文章中,压缩拷贝,结果发现效果很不错,而且压缩也是很快的,这下拷贝就顺利了

    至此我们解决了系统问题和源码问题


    注意:这里所说的源码问题不是指下载源码的问题,我会在最后面说一下现在如何能够得到相应的Android源码,反正从google上去下载我是不相信了。所以我提供了我已经下载好并且打成压缩包的连接,

    http://pan.baidu.com/s/1mgoNVGs


    只需要进行解压即可,关于解压缩Linux文件的话,可以查看另外一篇blog:

    http://blog.csdn.net/jiangwei0910410003/article/details/37997899


    上面的前奏都做好了,下面就来进行编译操作

    第一步:在此之前还需要安装一些辅助工具,防止在安装的时候提示错误,当然我们可以现在不安装,等到安装的时候会提示相应的错误,到时候我只需要针对性的去安装,但是那样在编译的过程中会很不爽的,所以我还是先把这些工作做了

    首先需要安装JDK,请转战另外的一篇Blog:

    http://blog.csdn.net/jiangwei0910410003/article/details/37996723


    当JDK安装完毕之后,下面就需要来安装一下编译库了:

    sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev 
    sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential  
    sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libs libncurses5-dev

    当然这些是必须要安装的,但是不是一定在编译的时候就没有问题,所以我们在编译的时候遇到什么问题的时候我们再去进行解决


    今天在Ubuntu11.04(64位)编译Android2.3源码时,遇到各种各样的问题。不是缺这个,就是少那个。现把这些问题和解决方法罗列出来,供大家参考

    普遍错误:
    1.错误:
    /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
    make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1
    解决:
    sudo apt-get install libc6-dev-i386 

    2.错误:
    make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp] error 1
    解决:
    sudo apt-get install g++-multilib 

    3.错误:
    external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No such file or directory
    compilation terminated.
    make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_cgi_intermediates/cgi.o] Error 1
    解决:
    sudo apt-get install zlib1g-dev

    4.错误:
    /usr/bin/ld: cannot find -lz
    collect2: ld returned 1 exit status
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1
    解决:
    sudo apt-get install lib32z1-dev

    5.错误:

    bison -d  -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
    /bin/bash: bison: command not found
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127
    解决:
    sudo apt-get install bison

    6.错误:
    Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
    /bin/bash: flex: command not found
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127
    解决:
    sudo apt-get install flex

    7.错误:
    /usr/bin/ld: cannot find -lncurses
    collect2: ld returned 1 exit status
    make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1
    解决:
    sudo apt-get install lib32ncurses5-dev

    8.错误:
    prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55: fatal error: X11/Xlib.h: No such file or directory
    compilation terminated.
    make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/main-common.o] Error 1
    解决:
    sudo apt-get install libx11-dev 

    9.错误:
    sh: gperf: not found
    calling gperf failed: 32512 at ./makeprop.pl line 96.
    make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h] Error 25
    make: *** Deleting file out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h'
    解决:
    sudo apt-get install gperf
    From:http://blog.csdn.net/offbye/article/details/6834285

    以上的错误总结参考:
    http://www.360doc.com/content/12/0602/16/6828497_215429231.shtml


    致命错误: bits/predefs.h:没有那个文件或目录 编译中断

    解决方法:
    sudo apt-get install gcc-multilib

    参考:
    http://blog.sina.com.cn/s/blog_6340cd9c0101e42h.html

    还有一个原因:

    Ubuntu 11.10以上的gcc版本是4.6.1,版本太高,编译android时出错,要把gcc版本改为4.4.3

    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4

    参考:http://blog.163.com/zhaolin53636848@126/blog/static/4908666820121993234837/


    总结错误:

    1.错误

    host Executable: aapt (out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)
    /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz
    /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.a when searching for -lz
    /usr/bin/ld: skipping incompatible //usr/lib/libz.so when searching for -lz
    /usr/bin/ld: skipping incompatible //usr/lib/libz.a when searching for -lz
    /usr/bin/ld: cannot find -lz
    collect2: ld returned 1 exit status
    make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

    解决办法:

    缺少lib32z1-dev,安装即可:apt-get install lib32z1-dev

    2.错误
    编译时出现 /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory 错误信息
    /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory
    compilation terminated.
    make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error 1
    解决办法:

    缺少libc开发包,安装即可: apt-get install libc6-dev-i386

    3.错误
    Android编译遇到错误/usr/bin/ld: cannot find -lstdc++的解决
    解决办法:

    缺少g++-multilib库,安装即可: apt-get install g++-multilib  

    参考:http://www.mobiletrain.org/lecture/doc/android/2011-04/389.html


    最后发现的一个错误:

    make android 时的 libwebcore.so error

    解决办法:增加文件swap

    参考:
    http://blog.csdn.net/zhoukejun/article/details/4211108

    http://blog.163.com/tod_zhang/blog/static/1025522142013225112338311/


    好吧在这上面的工作都做完了,错误也都解决了,编译也完成了,我是在晚上进行编译的,第二天好了,当看到结果的时候真的很开心:

    Target system fs image:    out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img
    Target ram disk: out/target/product/generic/ramdisk.img
    Target userdata fs image: out/target/product/generic/userdata.img
    Installed file list: out/target/product/generic/installed-files.txt 

    那么下面就运行一下编译的结果吧:

    1. 设置环境变量:
    USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin  
    USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic

    其中,~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。
    2. 运行模拟器。
    USER-NAME@MACHINE-NAME:~/Android$ emulator
    模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
    当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:
    USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img


    但是又来了一个错误:

    emulator: ERROR: You did not specify a virtual device name, and the system
    directory could not be found.
    If you are an Android SDK user, please use '@<name>' or '-avd <name>'
    to start a given virtual device (see -help-avd for details).
    Otherwise, follow the instructions in -help-disk-images to start the emulator

    解决方法:

    进入到Android源码目录中执行:

    source build/envsetup.sh 

    lunch sdk-eng

    然后再执行:

    emulator

    可以启动模拟器

    参考:http://blog.csdn.net/yf210yf/article/details/9206269


    再次运行,好吧有结果了:


    编译完Android源码之后,写还得再来看看如何编译Android内核源码,为什么要编译Android内核源码呢?这个是为了后续的工作做准备,后面会说到的,其实我们上面编译的Android源码他的内核源码Google已经编译好了,存放在:源目录/prebuilt/android-arm/kernel/kernel-qemu;


    下面我们就来看看如何编译内核源码吧,同样如此,想编译内核源码的话,我们需要内核源码,又是一件痛疼的事,网上有很多资源都是说使用goldfish版本的,然后就去:git clone http://android.googlesource.com/kernel/goldfish.git
    反正我是下载失败,原因和下载源码是一样的,google服务器连接失败,那怎么办呢?
    当时我是没有办法了,就去各种搜索,结果有人说goldfish是连接不上了,有人将内核源码放到github上了,地址如下:
    https://github.com/android/kernel_common

    如果下载失败的话,我已经下载好了,可以去以下的连接去下载:

    http://pan.baidu.com/s/1pQzPs


    我就去下载了,大约几百M吧,下载下来之后,就进行编译吧,在编译之前我们需要修改点东西:

    修改文件夹中的Makefile文件中的编译环境

    ARCH ?= (SUBARCH)
    CROSS_COMPILE ?= 

    修改成
    ARCH ?= arm
    CROSS_COMPILE ?= arm-eabi- 

    如图:


    采用的是arm体系结构,交叉编译使用的是arm-eabi-XXX工具,这个值只是个前缀

    下面我们就来编译吧,进入到文件夹中进行编译结果发现,说找不到指定的arm-eabi-gcc工具(这个错误发生在我编译Android4.4版本的时候,因为这个版本的源码中找不到指定的prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录,但是最后编译Android2.3.7版本的话就有了,所以针对于4.4版本没有的话,我们怎么办呢,那还得去网上搜索这个工具,下载地址:
    http://download.csdn.net/download/storeage/4036993),下载下来之后一般是存放到/usr/lib目录中,然后修改一下环境变量,这个可以参考前面配置JDK环境变量的方法


    首先需要:make goldfish_defconfig

    但是找不到指定文件,发现这个文件只在goldfish版本中,而我们下载的是kernel_common,这时候我们可以:

    make menuconfig

    然后选择对应的配置,但是问题又来了,哪些选项是必选的,哪些是不需要选的,反正最后编译总是失败,搞伤的了,所以还是得去找goldfish版本的(我上面之所以介绍了kernel_common版本的,就是记录一下我操作的过程,虽然最后失败了),不过运气挺好的,最后还真的被我找到了,具体的地址我记得不太清楚了,但是我放到网盘了,里面有相应的说明,goldfish下载地址:

    http://pan.baidu.com/s/1qW0TkkO


    下载下来之后,可以编译了,

    make goldfish_defconfig

    然后

    make

    这个编译的过程很快,不到一个小时吧

    OBJCOPY arch/arm/boot/zImage
    Kernel: arch/arm/boot/zImage is ready

    这样就编译成功了,那么我就是用这个内核镜像来启动模拟器吧:


    1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
    USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin
    2. 设置ANDROID_PRODUCT_OUT环境变量:
    USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
    3. 在后台中指定内核文件启动模拟器:
    USER-NAME@MACHINE-NAME:~/Android$  emulator -kernel ./kernel/common/arch/arm/boot/zImage &


    不幸的是模拟器是可以启动但是总是黑屏,而且是用adb shell也连接不上设备,这可怎么办,都快成功了,然后就去网上再次找答案,找到了:原因是我的源码是4.4版本的,2.3版本以后的体系架构是用的是armv7了,所以不是:

    make goldfish_defconfig

    而是

    make goldfish_armv7_defconfig

    再次编译,成功再次是用镜像文件启动模拟器,草,傻眼了,结果还是失败太蛋疼了,然后各种搜索,原因上面的解答,但是我已经修改了,还是不行(这个问题纠结了两个礼拜,我差点就放弃了),最后想是不是源码的问题,也只能这么想了,所以又去晚上找2.3.7的源码,别说着了一天,真是不负有心人呀,还真的被我找到了,而且找到很多个版本,都是压缩包的形式,在这里我真心的要感谢这个人,懂得资源分享,

    Android2.3.7源码下载地址:

    http://pan.baidu.com/s/1eQ9YT6i

    然后我就很兴奋的重新编译了Android2.3.7版本的源码(其实我当时有点担心,因为我现在的系统是64位的,不知道这个源码是多少位的,但是最后编译成功了,这个版本是64位的,也就不需要重新换系统了),因为有了之前的编译过程,好多问题都提前解决了,编译过程中是很顺利的,也是在晚上编译的结果也是成功了,这次我们在通过上面的方式来编译内核,然后启动模拟器,擦,结果可以了:


    成功了,这次是真的成功了,好感动,好激动呀,两次挫折两次激动~~


    总结:其实我们可以回顾一下上面的过程,个人感觉没有任何技术可言,我遇到的最大的问题就是资源获取不到的问题,所以我将使用到的资源都给出了下载链接,同时感觉遇到问题不可以胆怯,要勇敢面对~~

    PS:上面的过程是我成功之后的感想和操作,如果亲们按照我这种方式不成功的话,请留言~~我会帮助看看~~

    注:这篇文章其实没什么内容,但是里面有很多相关资源的下载连接,这个真的很有价值的~~


    展开全文
  • Android.mk编译控制

    2017-12-21 11:18:42
    Android编译

    我也不写Android.mk的语法的知识了,网上一搜一大把。本人目前手上有一块友善之臂生产的samsung的4412的开发板,根据编译android系统发现,有时候在packages/apps/下添加来自己的软件,但是最终编译镜像的时候发现这个软件没有编译。于是我修改原本Android.mk的LOCAL_MODULE_TAGS := optional 为LOCAL_MODULE_TAGS := eng。然后这个软件就在编译系统的时候编译了。在packages/apps/下的系统的软件LOCAL_MODULE_TAGS 这个值的属性为optional的是会编译的。同时Launcher3这个软件有个LOCAL_OVERRIDES_PACKAGES :=Launcher2这个属性,而在system/priv-app/中只有Launcher2/Launcher2.apk这个软件没有Launcher3.apk。但是经过我测试结果恰恰相反LOCAL_OVERRIDES_PACKAGES这个属性的值的软件没有被编译。

    按照我个人理解,android系统编译的时候先是一次将所有Android.mk加载。以LOCAL_PACKAGE_NAME(apk的名字)或者LOCAL_MODULE(动态库.so或者静态库.a等)来对应每一个Android.mk.根据LOCAL_MODULE_TAGS来判断是否使用这个Android.mk。像LOCAL_MODULE的mk需要使用PRODUCT_PACKAGES来让它编译进系统中。

    LOCAL_SDK_VERSION :=current 会导致无法使用hide的API

    LOCAL_PRIVILEGED_MODULE := true会使得编译出来的apk生成目录为/system/priv-app/

    展开全文
  • 为什么要这么做? 1、因为项目中一些功能需要调用系统源码中的一些接口,上层无法访问。所以想一些需要调用系统接口的方法用源码编译,然后使用aidl暴露出接口,...2、编译通过后,Android_studio 中就会生成 aidl...

    为什么要这么做?
    1、因为项目中一些功能需要调用系统源码中的一些接口,上层无法访问。所以想一些需要调用系统接口的方法用源码编译,然后使用aidl暴露出接口,供上层调用。

    准备工作:
    1、应用端写好 aidl demo,暂且我们称之为 Server 和 Client,编译安装测试(demo 中将要调用系统接口的代码注释掉)。
    2、编译通过后,Android_studio 中就会生成 aidl 文件对应的 .java 文件。
    这里写图片描述
    3、然后将 .java 文件放到 .aidl 同一文件夹下,删除 .aidl 文件。

    4、修改 as 工程变成 elipse 文件结构(似乎不明白,看下图)。
    这是 eclipse 的工程目录结构:
    这里写图片描述
    大家找一个 as 的工程目录结构做一个对比,找出路径不同的地方。
    然后复制源码中 package/apps/ 下边的任意一个工程,作为修改模板,进行修改。

    5、源码编译需要一个Android.mk 文件:网上教程非常多,我们着重介绍 aidl 相关的信息就好了。
    给一个模板:

    
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE_TAGS := optional
    #包含src目录下的所有java文件
    LOCAL_SRC_FILES := $(call all-java-files-under, src)
    #有些教程中说需要在此处添加 aidl 文件,这个估计是为了让源码编译生成 .java 文件。
    #我添加之后报错了,不添加,编译成功并且运行正常
                   #src/com/ors/server/IUserManagerInterface.aidl \
                   #src/com/ors/server/User.aidl
    #使用系统签名
    LOCAL_CERTIFICATE := platform
    #工程名称
    LOCAL_PACKAGE_NAME := Server
    
    include $(BUILD_PACKAGE)
    
    # Use the folloing include to make our test apk.
    include $(call all-makefiles-under,$(LOCAL_PATH))

    完成。

    展开全文
  • 1.下载工程环境 路径:...repo init --repo-url ssh://git@10.10.10.29/tools/repo -u ssh://10.10.10.29:29418/android/platform/manifest ...

    1.下载工程环境
    路径:https://redmine.rockchip.com.cn/projects/rk3328-android-8-0-box-sdk-dev/wiki

    repo init --repo-url ssh://git@10.10.10.29/tools/repo -u ssh://10.10.10.29:29418/android/platform/manifest -b rk33/mid/8.0/develop -m rk3328_box.xml//初始化repo
    
    repo sync  //下载代码

    //以上下载了ffplayer的工程环境

    2.编译环境
    按照网址上的方法分别编译uboot、kernel、android

    uboot:
    xlh@mid-server3:~/3328_8.1/u-boot$ make ARCHV=aarch64 rk3328_box_defconfig
    xlh@mid-server3:~/3328_8.1/u-boot$ ./mkv8.sh
    
    kernel:
    xlh@mid-server3:~/3328_8.1/kernel$ make ARCH=arm64 rockchip_defconfig
    xlh@mid-server3:~/3328_8.1/kernel$ make ARCH=arm64  rk3328-evb-android.img -j8
    
    android:
    xlh@mid-server3:~/3328_8.1$ source javaenv.sh   //用于修改jdk版本
    xlh@mid-server3:~/3328_8.1$ mm -j8   //编译

    3.下载ffplayer和ffmpeg
    路径:http://10.10.10.100/#/admin/projects/libffplayer

    lh@mid-server3:~/3328_8.1/frameworks/av/media$   git clone ssh://xlh@10.10.10.100:29418/libffplayer
    //注意路径   此时把所有的下载下来了,但看不见代码
    
    lh@mid-server3:~/3328_8.1/frameworks/av/media/libffplayer$  git branch -a   //查看分支
    lh@mid-server3:~/3328_8.1/frameworks/av/media/libffplayer$   git checkout rkffplayer-2015  
     //切换到rkffplayer-2015分支,此时可以看到代码
    
    //因为ffplayer要链接到ffmpeg,所以还要下载ffmpeg的代码
    xlh@mid-server3:~/3328_8.1/external$ git clone ssh://xlh@10.10.10.100:29418/ffmpeg
    xlh@mid-server3:~/3328_8.1/external/ffmpeg$ git branch -a
    xlh@mid-server3:~/3328_8.1/external/ffmpeg$ git checkout ffmpeg-12-11-04

    总结:repo init + repo sync 下载工程环境
    编译uboot、kernel、android
    git clone 下载libffplayer、ffmpeg代码
    (不要弄错先后顺序)

    遇到的问题:
    编译android时,出现如下问题:
    Failed to contact Jack server: Problem reading /home/xlh/.jack-server/client.pem. Try ‘jack-diagnose’
    Failed to contact Jack server: Problem reading /home/xlh/.jack-server/client.pem. Try ‘jack-diagnose’
    原因jack编译器不运行多个用户同时编译,要对~/.jack-settings和~/.jack-server/config.properties文件同时修改端口号。
    解决方法:

    prebuilts/sdk/tools/jack-diagnose   //运行该命令会显示错误情况
    
    xlh@mid-server3:~$ vim .jack-settings   
    xlh@mid-server3:~/.jack-server$ vim config.properties  //若没有该文件自己建立
    xlh@mid-server3:~/.jack-server$ chmod 0600 config.properties   //设置权限
    xlh@mid-server3:~$ cat .jack-settings
    # Server settings
    SERVER_HOST=localhost
    SERVER_PORT_SERVICE=8074
    SERVER_PORT_ADMIN=8075
    
    # Internal, do not touch
    SETTING_VERSION=4
    
    config.properties文件如下:
    #
    #Thu Sep 22 20:26:05 CST 2016
    jack.server.max-jars-size=104857600
    jack.server.max-service=4
    jack.server.service.port=8074
    jack.server.max-service.by-mem=1\=2147483648\:2\=3221225472\:3\=4294967296
    jack.server.admin.port=8075
    jack.server.config.version=2
    jack.server.time-out=7200
    展开全文
  • 如果说使用dex2jar和JD-GUI获得了一个APP反编译后的JAVA代码,再结合smali代码调试器来进行调试还不够爽,不够畅快的话,下面将介绍一个帮助分析代码执行流程的大神器。这个神器优点很多,不过遗憾的是它有一个致命...
  • 按照官方的编译步骤就可以编译android版本的各个静态库libxxx.a 当我们使用这些静态库,并且还需要编译自己写的那些c++代码时,可能会遇到以下两个问题 自己本地的android ndk和webrtc内部使用的ndk版本不同 ...
  • 这一篇是我们Android热修复学习深入分析的第一篇。 学习总纲计划可以看上一篇文章[总纲](https://blog.csdn.net/jieqiang3/article/details/84561534) 首先我们先来分析资源修复相关知识。资源修复的过程基本可以...
  • 平台 android、ios、windows、mac 第三方库
  • 本文是我的《Android NDK开发》系列的又一篇文章,上篇文章中,我分享了一个可以自动添加源文件列表的 Android.mk 示例模板,方便大家快速地搭建起完整的 NDK 开发工程框架,本文则主要探究几个主要的 NDK 编译...
  • 从上周开始,编译Android源码,昨天晚上终于完成了kernel源码的编译,并成功使用该kernel成功运行模拟器。 幸运的是,在这过程中碰到的问题并不多,而且都在网上找到了解决方法,大赞网络的力量。 回想2012年2...
  • 本文的目的是用比较容易理解的方式,介绍一下整个Android项目的编译。至少知道大概的编译流程是怎么样的,项目里面的Android.mk文件包含些什么内容。 makefile的作用 makefile文件用来描述文件之间的依赖关系,并...
  • 写给想深入理解androidandroid...Android4.4的源码下载和编译的全过程,解析的很详细包括了每个步骤和下载编译出错的解决方案。  该博客主要挑重点叙述,更详细,详细的内容我已经写好了一个文档,下载阅读就ok。
1 2 3 4 5 ... 20
收藏数 5,083
精华内容 2,033
关键字:

先后 编译android