在ubuntu下编译Android Gingerbread 出现了些问题,总结如下:
对于Android2.3以上的版本,编译最好在64位ubuntu下进行编译,以避免不必要的错误,具体编译方法参考source.android.com
A.
出现多次权限不够
/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: 权限不够
/bin/bash: /usr/meizu/Android/out/host/linux-x86/bin/bison: 权限不够
/bin/bash: build/core/find-jdk-tools-jar.sh: 权限不够
解决:
增加权限便可。
chmod a+x prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc
chmod a+x /usr/meizu/Android/out/host/linux-x86/bin/bison
B 出现bison找不到.
/bin/bash: bison:找不到命令
其他错误请参考:
用sudo apt-get install bison解决。
C.
E: d pkg 被中断,您必须手工运行 sudo dpkg –configure -a 执行sudo dpkg –configure -a 解决此问题
D.
下载repo时出现 Couldn't resolve host 'android.git.kernel.org'
解决:
如果不能够下载repo,则说明被墙了 需要用代理服务器,在此网站能够找到一些最新的免费代理http://www.nbdaili.com/
curl -x 81.177.32.41:3128 http://android.git.kernel.org/repo > ~/bin/repo
E.
arm-eabi-gcc: error trying to exec 'cc1': execvp: No such file or directory”这样的错误
chmod -R 777 *
其他错误请参考此帖:http://blog.csdn.net/zzp16/article/details/6578344
1. 解决Ubuntu安装sun-java6-jre时无法选择ok键的问题
先点一下tab键才能选ok键
2. 删除原来的JDK:
sudo apt-get remove sun-java6-jre sun-java6-plugin sun-java6-binsun-java6-fonts
3. make clean ---> make update-api --> make
4. /etc/apt/sources.list,
执行 apt-getupdate 更新软件库
5. 无法获得锁 /var/lib/dpkg/lock
sudo rm/var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
6. 错误:
arm-eabi-gcc: error trying to exec'cc1': execvp: No such file or directory
make: ***[out/target/product/generic/obj/EXECUTABLES/dalvikvm_intermediates/Main.o] 错误 1
---解决办法:可能是权限问题,到android源码目录下,直接chmod -R 777 *
7. 编译源码模块:(http://blog.csdn.net/luoshengyang/article/details/6566662)
a. 首先在Android源代码目录下的build目录下,有个脚本文件envsetup.sh,执行这个脚本文件后,就可以获得一些有用的工具:
build下的一个文件:
source build/envsetup.sh (前面要加上source,否则找不到mmm等命令)(不同的shell窗口都得运行该命令后才能使用mmm等命令)
b. 使用mmm命令来编译指定的模块,例如QuickSearchBox应用程序:
mmmpackages/apps/QuickSearchBox/
c. 编译好模块后,还要重新打包一下system.img文件,这样我们把system.img运行在模拟器上时,就可以看到我们的程序了。
make snod
d. 模拟器到环境变量 运行模拟器
exportPATH=$PATH:/mydroid2.30/mydroid/out/host/linux-x86/bin
exportANDROID_PRODUCT_OUT=/mydroid2.30/mydroid/out/target/product/generic
//注释~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。
emulator
8. 源码中存放app到路径out/target/product/generic/system/app
刷机时,该路径中到apk都会成为系统自带应用。
9. 错误: ./adbdevices 提示???????????? nopermissions
----解决办法:切换到root用户,使用adb kill-server, adb start-server 就可以了
----原因:adb需要在root权限时再启动才有权限。
10. 错误:编译的源码apk在真机上安装时会出现INSTALL_FAILED_OLDER_SDK问题
---解决办法:修改源码下build/core/version_defaults.mk文件,将
PLATFORM_VERSION := 2.3.1
PLATFORM_VERSION_CODENAME:= REL
然后重新编译整个源码。
11. android分辨率的修改 && hdpi-mdpi (http://lostghoul.blog.163.com/blog/static/11172199920112842738688/)
在文件 夹build\target\product\generic.mk加入
CUSTOM_LOCALES:= hdpi mdpi ldpi
12. 错误:root用户使用gedit和emacs带图形界面的都出错
在终端切换至root,然后gedit某文件,结果报错:
(gedit:4987): EggSMClient-WARNING **:Failed to connect to the session manager: None of the authentication protocolsspecified are supported**
GLib-GIO:ERROR:gdbusconnection.c:2270:initable_init: assertion failed:(connection->initialization_error == NULL)
Aborted (core dumped)
-----解决方法:切换到root权限,在/etc/bash.bashrc 文件尾部添加:
exportDBUS_SESSION_BUS_ADDRESS=""
13. 错误:进不了系统。修改了profile文件后,可能导致进不了系统(输入密码后,又返回输入密码的界面)
解决办法:a.在输入密码界面,按ctrl+alt+F1 键,进入命令行模式
b. 输入用户名和密码login
c. 执行命令/usr/bin/sudo vi /etc/profile
d. 将文件修改回来后,重启电脑即可。
14. 在ubuntu下打开.TXT文件,中文显示为乱码
打开应用程序——系统工具——配置编辑器。如果没有的话打开系统——首选项——主菜单——系统工具——配置编辑器。
依次点开
apps->gedit-2->preferences->encodings 中的auto-detected
在双击弹出对话框中加入GB18030,GBK,GB2312,然后将GB18030,GB2312移到最上
再次打开.txt文件,问题解决了。
15. 当替换了整个代码包,编译出错找不到资源时,只需要修改资源文件中的任意一个,让它重新编译资源就好。
16. 编译时出现make: *** 是一个目录。 停止。 可能是目录下含有多个项目的工程,去掉多余的就ok了。
Target system fs image:out/target/product/generic/obj/PACKAGING/systemimage_unopt_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
/etc/bash.bashrc
.bashrc
/mydroid2.30/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/libexec/gcc/arm-eabi/4.3.1
PATH=/usr/bin/gcc:/usr/share/man/man1:$PATH
export PATH
/home/rainy/android-sdk-linux/platform-tools/
放app到路径
out/target/product/generic/system/app
当在源码里加入新的资源图片时,该资源图片得先在xml里有用到,编译才会通过,否则编译时会说代码中引用不到。 解决办法就是先随便放到一个xml里面,编译一次之后再用到代码中应用,后面再编译就不会出现该问题了。
启动指定分辨率的模拟器:如 emulator -skin WVGA800
列出连接到电脑到设备 lsusb
export ANDROID_HOME=/home/rainy/android-sdk-linux :$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools
在emulator-5554模拟器上安装ebook.apk
adb -s emulator-5554 installebook.apk
在真机上安装ebook.apk
adb -s HT9BYL904399 installebook.apk
在emulator-5554模拟器上重新安装ebook.apk
adb -s emulator-5554 install -rebook.apk
在真机上重新安装ebook.apk
adb -s HT9BYL904399 install -rebook.apk
在emulator-5554模拟器上卸载ebook.apk(不保留数据和缓冲目录)
adb -s emulator-5554 uninstallnet.blogjava.mobile.ebook
在真机上卸载ebook.apk(保留数据和缓冲目录)
adb -s HT9BYL904399 uninstall -knet.blogjava.mobile.ebook
source /etc/profile ulimit -n
./adb uninstall com.android.quicksearchbox
./adb install/mydroid2.30/mydroid/out/target/product/generic/system/app/QuickSearchBox.apk
编译时,哪里找不到资源就修改一下该资源,就会重新编译了,
02-23 11:11:16.819: E/EasouSearch(2741): httperror:java.io.FileNotFoundException: http://smartphone.easou.com:8080/oss/upload/QuickSearchBox.apkcode=0
02-23 11:11:16.719: I/EasouSearch(2741): httpget:http://smartphone.easou.com:8080/oss/upload/QuickSearchBox.apk
02-23 11:11:14.476: I/EasouSearch(2741): httpget:http://smartphone.easou.com:8080/oss/s/UpdateAction?uid=1329966609375914&version=1.0.1.120223&product=easou搜索&phoneScreenWidth=540&phoneScreenHeight=960&phoneMac=D4:20:6D:83:04:A0&phoneFirmwareVersion=2.3.4&phoneImsi=460028118375914&phoneModel=HTCEVO3DX515m&phoneImei=356871041081724&phoneCid=bkcn3510_&project=46804&productId=1
/mydroid2.30/mydroid/packages/apps/PackageInstaller/src/com/android/packageinstaller
* QVGA (240x320, low density, smallscreen)
* WQVGA400 (240x400, low density,normal screen)
* WQVGA432 (240x432, low density,normal screen)
* HVGA (320x480, medium density,normal screen)
* WVGA800 (480x800, high density,normal screen)
* WVGA854 (480x854 high density,normal screen)
* WXGA720 (1280x720, extra-highdensity, normal screen) new
* WSVGA (1024x600, medium density,large screen) new
* WXGA (1280x800, medium density,xlarge screen)
exportPATH=$PATH:/AndroidSrc/2.3/mydroid/out/host/linux-x86/bin
exportANDROID_PRODUCT_OUT=/AndroidSrc/2.3/mydroid/out/target/product/generic
//注释~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。
emulator