Android学习【Android内核编译流程和错误笔记】
博客:http://blog.csdn.net/muyang_ren
Ubuntu14.04 LTS(要求是64位长期支持版LTS)
Jdk1.8
内核:android4.0
一:jdk
1、解压jdk,获得路径
2、
sudo vim /etc/environment
改动为:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/lhy/jdk/jdk1.8.0_45/bin"
JAVA_HOME="/home/lhy/jdk/jdk1.8.0_45"
CLASSPATH=".:/home/lhy/jdk/jdk1.8.0_45/lib"
3、source /etc/environment
二:ubuntu配置
须要注意jdk的版本号和编译器gcc、g++的版本号问题。
官网配置:http://source.android.com/source/initializing.html
Ubuntu14.04:
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
把下面出现错误须要安装的都放在这了
sudo apt-get install gcc-4.4-multilib
sudo apt-get install g++-4.4-multilib
sudo apt-get install flex
sudo apt-get install libncurses5-dev
sudo apt-get install lib32ncurses5-dev
sudo apt-get install libswitch-perl
sudo apt-get install u-boot-tools
sudo apt-get install gawk(这个是网上看到须要装的,我就提前安装就没出错了)
出现错误:
下列软件包有未满足的依赖关系:
g++-multilib : 依赖: gcc-multilib (>= 4:4.8.2-1ubuntu6) 可是它将不会被安装
依赖: g++ (>= 4:4.8.2-1ubuntu6) 可是它将不会被安装
E: 无法修正错误,由于您要求某些软件包保持现状。就是它们破坏了软件包间的依赖关系
处理方法:
sudo apt-get install g++
sudo apt-get install gcc-multilib
出现错误:
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: java version "1.8.0_45".
The correct version is: Java SE 1.6.
Please follow the machine setup instructions at
http://source.android.com/source/download.html
************************************************************
build/core/main.mk:131: *** stop。
停止。
解决的方法,
使用jdk 1.6
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/lhy/jdk/jdk1.6.0_29/bin"
JAVA_HOME="/home/lhy/jdk/jdk1.6.0_29"
CLASSPATH=".:/home/lhy/jdk/jdk1.6.0_29/lib"
出现错误:
g++: selected multilib '32' not installed
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] 错误 1
解决的方法:
须要安装gcc、g++的multilib包。直接运行下面的命令。会自己主动安装g++、gcc的multilib包;
sudo apt-get install g++-4.4-multilib
出现错误(这个事实上能够忽略):
注意:某些输入文件使用或覆盖了已过时的 API。
注意:要了解具体信息,请使用 -Xlint:deprecation 又一次编译。
注意:某些输入文件使用了未经检查或不安全的操作。
注意:要了解具体信息,请使用 -Xlint:unchecked 又一次编译。
解决的方法(手敲,别tab键。机不好会卡好久):make update-api
出现错误:
/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
出现错误:
host C: adb <= system/core/adb/transport_usb.c
host C: adb <= system/core/adb/commandline.c
host C: adb <= system/core/adb/adb_client.c
host C: adb <= system/core/adb/sockets.c
host C: adb <= system/core/adb/services.c
host C: adb <= system/core/adb/file_sync_client.c
host C: adb <= system/core/adb/get_my_path_linux.c
host C: adb <= system/core/adb/usb_linux.c
host C: adb <= system/core/adb/utils.c
host C: adb <= system/core/adb/usb_vendors.c
host C: adb <= system/core/adb/fdevent.c
host Executable: adb (out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb)
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1
解决的方法:
sudo apt-get install libncurses5-dev
发现错误:
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1
解决的方法:
sudo apt-get install lib32ncurses5-dev
发现错误:
dalvik/vm/native/dalvik_system_Zygote.cpp: In function ‘int setrlimitsFromArray(ArrayObject*)’:
dalvik/vm/native/dalvik_system_Zygote.cpp:194: error: aggregate ‘rlimit rlim’ has incomplete type and cannot be defined
dalvik/vm/native/dalvik_system_Zygote.cpp:217: error: ‘setrlimit’ was not declared in this scope
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o] 错误 1
解决的方法:
$ vim dalvik/vm/native/dalvik_system_Zygote.cpp
加入头文件
#include <sys/resource.h>
发现错误:
Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl
/usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5
/usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at
external/webkit/Source/WebCore/make-hash-tools.pl line 23.
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
解决的方法:
sudo apt-get install libswitch-perl
出现错误:
/bin/bash: mkimage: 未找到命令
make: *** [out/target/product/fs210/ramdisk.img] 错误 127
make: *** 正在删除文件“out/target/product/fs210/ramdisk.img”
解决的方法:
sudo apt-get install uboot-mkimage
**假设出现下面提示**
---------------------------------------------------------
如今没有可用的软件包 uboot-mkimage,可是它被其他的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者仅仅能在其他公布源中找到
可是下列软件包代替了它:
u-boot-tools:i386 u-boot-tools
E: 软件包 uboot-mkimage 没有可供安装的候选者
---------------------------------------------------------
**就安装下面工具**
sudo apt-get install u-boot-tools
发现错误:
frameworks/base/include/utils/KeyedVector.h: In instantiation of ‘const VALUE& android::DefaultKeyedVector<KEY, VALUE>::valueFor(const KEY&) const [with KEY = android::String8; VALUE = android::wp<android::AssetManager::SharedZip>]’:
frameworks/base/libs/utils/AssetManager.cpp:1797:44: required from here
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
ssize_t i = indexOfKey(key);
^
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<android::String8, android::wp<android::AssetManager::SharedZip> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/AssetManager.o] 错误 1
解决的方法:
更换gcc和g++的版本号
1.lhy@Ubuntu-14:~$ cd /usr/bin/
2.查看gcc和g++文件
lhy@Ubuntu-14:/usr/bin$ ls -l gcc*
lrwxrwxrwx 1 root root 7 6月 30 18:38 gcc -> gcc-4.8
-rwxr-xr-x 1 root root 255080 3月 20 2014 gcc-4.4
-rwxr-xr-x 1 root root 775888 5月 15 02:54 gcc-4.8
lrwxrwxrwx 1 root root 10 6月 30 18:38 gcc-ar -> gcc-ar-4.8
-rwxr-xr-x 1 root root 26968 5月 15 02:54 gcc-ar-4.8
lrwxrwxrwx 1 root root 10 6月 30 18:38 gcc-nm -> gcc-nm-4.8
-rwxr-xr-x 1 root root 26968 5月 15 02:54 gcc-nm-4.8
lrwxrwxrwx 1 root root 14 6月 30 18:38 gcc-ranlib -> gcc-ranlib-4.8
-rwxr-xr-x 1 root root 26968 5月 15 02:54 gcc-ranlib-4.8
lhy@Ubuntu-14:/usr/bin$ ls -l g++*
lrwxrwxrwx 1 root root 7 4月 8 2014 g++ -> g++-4.8
-rwxr-xr-x 1 root root 259176 3月 20 2014 g++-4.4
-rwxr-xr-x 1 root root 775888 5月 15 02:40 g++-4.8
3.将之前的备份:
lhy@Ubuntu-14:/usr/bin$ sudo mv gcc gcc.bak
lhy@Ubuntu-14:/usr/bin$ sudo mv g++ g++.bak
4.创建新的gcc和g++链接
lhy@Ubuntu-14:/usr/bin$ sudo ln -s gcc-4.4 gcc
lhy@Ubuntu-14:/usr/bin$ sudo ln -s g++-4.4 g++
5.查看gcc和g++版本号
lhy@Ubuntu-14:/usr/bin$ gcc -v
lhy@Ubuntu-14:/usr/bin$ g++ -v
出现下面内容,编译成功
mkimage -A arm -O linux -T ramdisk -C none -a 0x30A00000 -n "ramdisk" -d out/target/product/fs210/ramdisk.img out/target/product/fs210/ramdisk-uboot.img
Image Name: ramdisk
Created: Mon Jun 29 03:49:56 2015
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 165454 Bytes = 161.58 kB = 0.16 MB
Load Address: 30a00000
Entry Point: 30a00000
Target userdata fs image: out/target/product/fs210/userdata.img
in mkuserimg.sh PATH=out/host/linux-x86/bin/:/home/lhy/jdk/jdk1.6.0_29/bin:/usr/local/sbin:/us
r/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/
local/games:/home/lhy/jdk/jdk1.6.0_29/bin:/home/lhy/src_21
0/android4.0-fs210_v2/out/host/linux-x86/bin:/home/lhy/src_210/android4.0-
fs210_v2/prebuilt/linux-x86/toolchain/arm-linux-
androideabi-4.4.x/bin:/home/lhy/src_210/android4.0-
fs210_v2/development/emulator/qtools:/home/lhy/src_210/and
roid4.0-fs210_v2/prebuilt/linux-x86/toolchain/arm-linux-
androideabi-4.4.x/bin:/home/lhy/src_210/android4.0-
fs210_v2/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
make_ext4fs -s -l 536870912 -a data out/target/product/fs210/userdata.img out/target/product/fs210/data
Creating filesystem with parameters:
Size: 536870912
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 2048
Label:
Blocks: 131072
Block groups: 4
Reserved block group size: 31
Created filesystem with 20/32768 inodes and 4234/131072 blocks
out/target/product/fs210/userdata.img total size is 10797456
Android学习【Android内核编译流程和错误笔记】的更多相关文章
- android学习-ndk-build(androidstudio编译cocos2d-x库的cpp为so文件的解释)
本文不作为ndk初学使用,只是对cpp等c++文件编译成so文件的过程中,参数含义,及ndk配置的解释.使用的技术比较旧. androidStudio使用gradle调用ndk-build工具编译c+ ...
- android学习——android架构
android架构:在了解全局的情况下进行细致化的分析才能更有效的学习android的运行原理,才能更深刻的理解android开发: 1.架构图直观 2.架构详解 2.1.Linux Kernel 2 ...
- android学习——Android Layout标签之-viewStub,requestFocus,merge,include
定义Android Layout(XML)时,有四个比较特别的标签是非常重要的,其中有三个是与资源复用有关,分别是<viewStub/>, <requestFocus />, ...
- android学习——android 常见的错误 和 解决方法
1. Application does not specify an API level requirement! 解决方法:AndroidManifest.xml中 加入: <uses-sdk ...
- Android学习----Android架构
android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层.蓝色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C++语言编写 ...
- android学习——android项目的的目录结构
然后我们看一下Helloword的程序目录: 我们可以看到 大致有的文件: 1. MainHelloWorld.java文件 2. R.java文件 3. android.jar文件 4. RE ...
- android学习——Android Studio下创建menu布局文件
一.问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下 ...
- openfire Android学习---android客户端聊天开发之登录 和 注销登录
一切就绪,新建一个android测试工程: 上网权限配置,界面绘制啥的,这里就不说了. 首先 导入一个smark包.这个是用来维护长连接的,也可以是asmark.我用的是asmark 先普及一些基本知 ...
- Android学习----Android Studio 技巧汇总
关于快捷键 The File Structure Popup ctrl+f12此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法.勾选上“show anonymous classes” ...
随机推荐
- redis入门指南学习笔记
redis的常见命令 set key hello get key incr num get num set foo lorem incr foo hset car price 500 hset car ...
- DELL磁盘阵列控制卡(RAID卡)MegaCli常用管理命令汇总
新版本的 MegaCli-1.01.24-0.i386.rpm (下载地址:http://www.lsi.com/downloads/Public/MegaRAID Common Files/8.02 ...
- 如何搭建DHCP及DHCP中继服务器
当局域网中有大量的主机时,如果逐台设置ip地址.默认网关.dns服务器地址时等网络参数,显然是一个费力也未必讨好的方法,这时使用DHCP的方式分发ip地址,能够动态配置各客户机的网络地址参数,大大减轻 ...
- 微信企业号开发遇到的bug
a. 微信嵌入视频: a.1 视频元素播放时层级默认被顶置 a.1 视频播放后窗口无法通过css改变层级 a.2 视频播放后窗口无法通过css隐藏 解决方案:做个虚假的播放窗口,点击播放窗口(虚假的) ...
- (转)C#.NET使用TTS引擎实现文语转换
(转)C#.NET使用TTS引擎实现文语转换 本文讲述使用微软TTS5.1语音引擎(中文)实现文本阅读和音频输出为WAV完美解决方案. 网上很多文章说的是要安装SAPI.51 SDK,而这个东西有好几 ...
- 【Linux】 任务调度/计划 cron
实时查看日志: tail -f /var/log/cron 显示任务调度 bash#crontab -u username -l 编辑 bash#crontab -u username -e 内容: ...
- phpcms v9版本二次开发四步曲
今晚看了一下PHPCMS V9版本,做一个实例抛砖引玉,其实很简单,以下是二次开发的一个实例以旅游模块为例1. 在phpcms\modules目录下建立一个文件夹tour2. 在phpcms\m ...
- 转 常用JQuery插件整理
虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...
- PDO封装函数
header("Content-type: text/html; charset=utf-8"); /** * 初始化 pdo 对象实例 * @param bool $newins ...
- Delphi XE7下 Intraweb 发布为ASP.NET应用程序
一.XE7下Intraweb开发这里就不说了,重点是在开发Intraweb时与ISAPI不同之处要选择 IW library,编译成DLL文件. 二.网站的配置 1.这是站点的物理路径,c:\site ...