Android源代码编译和运行常见错误解决方案

我们在经历过辛苦的Android源代码的下载、编译及搭建环境之后,等待我们的就是大展拳脚的编写相关程序并试图成功地编译和运行程序,体验编译和运行成功的快感;但是,结果有时却是常常大相径庭的,那么怎样解决那?下面即是本人在研究Android源代码时遇到的编译和运行错误,我做了相关总结与大家分享,内容如下:

1、错误信息:SDK init failure:no available video device

解决方案:export DISPLAY =: 0 

当然,为了防止每次开机后进入重复地执行该语句,我们一般将该语句添加到profile脚本文件中,这样就不需要重复的输入执行该语句了。其实根本原因是缺少了一些X11系列文件包。你可以执行sudo apt-get install libsdl1.2debian:i386安装,然后再export DISPLAY =:0即可。

2、错误信息:jdk:the list of sources can not be read

解决方案:sudo add-apt-repository “deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse”

当我们在安装JDK的时候,我们会执行命令:sudo add-apt-repository “deb http://us.archive.ubuntu.com/ubunt/hardy multiverse”报错,为什么那?原因就是在http://us.archive.ubuntu.com/ubuntu/ hardy之间缺少了个空格的,只要我们cd /etc/apt/中修改目录下的sources.list,添加上缺少的空格就可以了。

3、错误信息:/usr/bin/ld: cannot find -lstdc++ 

解决方案:sudo apt-get install g++-multilib

以下相关/usr/bin/ld:cannot find -lxxx的错误信息是由于缺少相关的依赖包或者包的连接错误所造成的编译失败。

4、错误信息:./usr/bin/ld: cannot find -lz

.解决方案:sudo apt-get install libz1-dev

5、错误信息:/usr/bin/ld:cannot find -lncurses

解决方案:sudo apt-get install lib32ncurses5-dev

6、错误信息:frameworks/base/include/utils/keyedvector.h note:use 'this->indexofkey' instead

解决方案:

A. 安装gccg++ 4.4版本

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

B 修改gcc链接

sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc

XXX@XXX:/usr/bin$ ls -l gcc*
lrwxrwxrwx 1 root root      7 Sep  6 10:43 gcc -> gcc-4.4
-rwxr-xr-x 1 root root 259232 Apr 16 14:20 gcc-4.4
-rwxr-xr-x 1 root root 353216 Apr 16 07:37 gcc-4.6
lrwxrwxrwx 1 root root      7 Aug 30 19:26 gcc.bak -> gcc-4.6
C 修改g++链接

sudo mv g++ g++.bak
sudo ln -s g++-4.4 g++

XXX@XXX:/usr/bin$ ls -l g++*
lrwxrwxrwx 1 root root      7 Sep  6 10:45 g++ -> g++-4.4
-rwxr-xr-x 1 root root 263328 Apr 16 14:18 g++-4.4
-rwxr-xr-x 1 root root 357312 Apr 16 07:36 g++-4.6
lrwxrwxrwx 1 root root      7 Mar 14 04:05 g++.bak -> g++-4.6

D 查看gccg++版本号gcc-v

g++-v

之所以会出现这个错误信息,是因为我们所使用的ubuntu系统的默认gccg++版本较高,对于语法的要求较严格,所以我们需要将gccg++的版本降至为4.4即可。

7、错误信息:Make:...../kernel/goldfish/arch/arm: Is a directory.  Stop.

解决方案:ARCH ... ?= arm中的arm后面不能有空格,否则出现上述错误信息。

我们知道Android系统使用的CPU体系结构是arm的,因此,我们需要修改Android内核源代码中的Makefile文件中的ARCH设置为arm。如果arm后面存在空格就会报上面的错误信息,这个错误信息是很不容易被返现的。

8、错位信息:android /usr/bin/ld: cannot find lz

解决方案:$sudo apt-get install lib32z1-dev

编译时,出现上面的错误信息,是因为缺少依赖的编译包文件,我们安装即可解决问题。

9、错误信息:SWT folder 'xxxx/out/host/linux-x86/framework/x86_64'does not exist

解决方案:$export ANDROID_SWT=/home/${USERNAME}$/WORKSPACE/prebuilt/linux-x86_64/swt

当我们在执行相关工具命令,如aapt android adb等时,会报出上面的错误信息,原因很简单根据命令窗的相关提示信息,我们就可以知道找不到命令所在的路径,那么最直接的办法就是在环境变量中添加即可,执行上面的命令即可。

10、错误信息:android emulator ERROR:could not find required ramdisk image(radisk.img)

解决方案:重新make一下就好了

由于重新make时是增量编译,所以不会像第一次完整编译过程那么漫长的。然后,我们在重新mmmmake snod单独编译就可以了。原因可是是因为第一次单独编译之后,编译器并不知道它要编译的是整个还是单独某个模块的编译(因为丢失掉了完整编译时的路径所致),所以丢失路径;重新编译后,继续操作就可以了。如果有网友知道其他的什么方法,请告知。

11、错误信息:[1]+stopped (signal) ./xxx

解决方案:将return 0 改为exit(0)

我们在自己编写程序访问驱动设备的时候,启动虚拟机,当我们adb shell进入到/system/bin中执行./xxx时,报上面的错误信息,原因是使用return 0的地方 引起了堆栈下溢错误。


本人最近刚刚新建了一个群号,希望与兴趣相投的同学一起研究学习,申请加入时,请输入加入的理由,谢谢!!!

QQ群号:179914858

 

更多相关文章

  1. Android(安卓)线程通信,初见
  2. 极光小课堂 | 极光推送集成解决方案
  3. 深入理解java中的package关键字
  4. (转)Android中JNI编程的那些事儿
  5. 如何去写Android(安卓)init.rc (Android(安卓)init language)
  6. Android开发调试中遇到的Waiting for HOME解决方案
  7. Android(安卓)apk项目中添加ffmpeg编解码库
  8. Android(安卓)AsyncTask源码剖析
  9. Android菜鸟日记25-android反编译

随机推荐

  1. Android(安卓)StatFs类
  2. (2.2.8.1)关于Android(安卓)Studio里的Grad
  3. Kotlin + Android(安卓)KTX让开发更简单
  4. Android(安卓)Monkey的使用
  5. Android: Type Method 'NewStringUTF' co
  6. MediaBrowserService 音乐播放项目《IT蓝
  7. TextView获取父控件的绘图状态
  8. Android(安卓)中的显示单位
  9. Android各版本间API的差异 - (Share)Acti
  10. 使用SQLiteOpenHelper 和使用ContentProv