1、Android 系统开发编译环境配置主机系统:Ubuntu9.04(1)安装如下软件包sudo apt-get install git-core sudo apt-get install gnupgsudo apt-get install sun-java5-jdksudo apt-get install flexsudo apt-get install bisonsudo apt-get install gperfsudo apt-get install libsdl-devsudo apt-get install libesd0-devsudo apt-get install build-
2、essentialsudo apt-get install zipsudo apt-get install curlsudo apt-get install libncurses5-devsudo apt-get install zlib1g-devandroid 编译对 java 的需求只支持 jdk5.0 低版本,jdk5.0 update 12 版本和 java 6 不支持。(2)下载 repo 工具curl http:/android.git.kernel.org/repo /bin/repochmod a+x /bin/repo(3)创建源代码下载目录:mkdir /work/and
3、roid-froyo-r2(4)用 repo 工具初始化一个版本(以 android2.2r2 为例)cd /work/android-froyo-r2repo init -u git:/android.git.kernel.org/platform/manifest.git -b froyo初始化过程中会显示相关的版本的 TAG 信息,同时会提示你输入用户名和邮箱地址,以上面的方式初始化的是 android2.2 froyo 的最新版本,android2.2 本身也会有很多个版本,这可以从 TAG 信息中看出来,当前 froyo 的所有版本如下:* new tag android-2.2.1
4、_r1 - android-2.2.1_r1* new tag android-2.2_r1 - android-2.2_r1* new tag android-2.2_r1.1 - android-2.2_r1.1* new tag android-2.2_r1.2 - android-2.2_r1.2* new tag android-2.2_r1.3 - android-2.2_r1.3* new tag android-cts-2.2_r1 - android-cts-2.2_r1* new tag android-cts-2.2_r2 - android-cts-2.2_r2* ne
5、w tag android-cts-2.2_r3 - android-cts-2.2_r3这样每次下载的都是最新的版本,当然我们也可以根据 TAG 信息下载某一特定的版本如下:repo init -u git:/android.git.kernel.org/platform/manifest.git -b android-cts-2.2_r3(5)下载代码repo syncfroyo 版本的代码大小超过 2G,漫长的下载过程。(6)编译代码cd /work/android-froyo-r2makeUbuntu 下使用 Simba 服务实现局域网内文件共享Ubuntu 下安装 Simba 服务器
6、将 linux 电脑上的内容共享,同一局域网内的另外一台 Windows PC 即可访问其共享内容,从而实现 Windows 电脑向访问本地文件一样访问 Linux 文件系统的内容。(1)安装 Simaba 服务器sudo apt-get install samba(2)安装 samba 图形化配置软件sudo apt-get install system-config-samba(3)创建一个 Simba 专用用户从“系统”“系统管理”“用户和组” ,来创建。如图,先点击“解锁” ,然后“添加新用户”然后输入新用户名字(如 Simba)和密码(如 111111),然后在 “高级”里面,选择“
7、主组”为 sambashare 后点击“确定“即可一句话来概括,就是创建一个主组为 sambashare 的用户(4)配置 samba 共享从“系统”“系统管理”samba“,运行配置界面然后”首选项“”服务器设置“。点击:安全性,在最后的”来宾帐号“里面, 选择我们新建立的那个用户 simba 后点击确定(5)修改 samba 配置文件打开/etc/samba/smb.conf,修改 valid users = XXXX 为 valid users = simba(6)重启 samba 服务sudo /etc/init.d/samba restart(7)添加共享文件从“系统”“系统管理”s
8、amba“,运行配置界面点击“添加“来添加共享文件夹 ,点击“浏览“来选择需要共享的文件夹,选择 “可擦写“和“显示“ ,点击“访问“可以设置访问权限,最好设置成“允许所有用户访问“本文来自 CSDN 博客,转载请标明出处:http:/ 下 tftp 服务器的创建实验平台:Ubuntu9.04(1)安装 tftp 服务sudo apt-get install tftp tftpd openbsd-inetd(2)在根目录下创建文件夹 tftpboot 文件夹并修改权限 cd / sudo mkdir tftpboot sudo chmod 777 tftpboot(3)修改/etc/inetd
9、.conf 文件如下:tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot(4)开启 tftp 服务sudo /etc/init.d/openbsd-inetd reload sudo in.tftpd -l /tftpboot(5)重启电脑,然后将测试文件放入/tftpboot 目录下即可开始测试,出现问题可能一般都是权限问题/tftpboot 目录下的文件访问权限改成 0777本文来自 CSDN 博客,转载请标明出处:http:/ Android 产品项目从 google 网站上下载的 android
10、源代码编译时默认是编译 google 设定的产品,如果要开发自己的产品,则需要重新定义一个产品项目,过程如下:首先我们定义产品的规格,举例如下:公司名称 ardent产品名称 MTP主板名称 merlin然后安装下面的步骤新建产品项目:(1)在源代码目录下创建一个用户目录mkdir vendor(2)在用户目录下创建一个公司目录mkdir vendor/merlin(3)在公司目录下创建一个 products 目录mkdir vendor/merlin/products(4)在上面创建的 products 下创建一个产品 makefile 文件 MTP.mk,内容如下:PRODUCT_PACK
11、AGES := AlarmClock Email Fallback Launcher2 Music Camera Settings LatinIME NotePad SoundRecorder Bluetooth CertInstaller DeskClock$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)# OverridesPRODUCT_MANUFACTURER := ardentPRODUCT_BRAND := ardentPRODUCT_NAME := MTPPRODUCT_MODEL := MultiMedia T
12、ouch PhonePRODUCT_DEVICE := merlinPRODUCT_LOCALES := zh_CN产品 makefile 文件的编写有一套规则,详细情况见此文后面的补充内容。(5)在 vendor/merlin/products 目录下创建一个 AndroidProducts.mk 文件,定义 Android 产品配置文件的路径,具体如下:PRODUCT_MAKEFILES := $(LOCAL_DIR)/MTP.mk(6)在公司目录下创建一个主板目录mkdir vendor/ardent/merlin(7)在主板目录下新建一个主板配置文件 BoardConfig.mk,内容
13、如下:TARGET_NO_BOOTLOADER := trueTARGET_NO_KERNEL := trueTARGET_CPU_ABI := armeabiBOARD_USES_GENERIC_AUDIO := trueUSE_CAMERA_STUB := true(8)如果你希望修改系统属性,则可以在主板目录下新建一个 system.prop 文件,该文件中可以修改系统属性,举例如下:# system.prop for # This overrides settings in the products/generic/system.prop file# rild.libpath=/sys
14、tem/lib/libreference-ril.so# rild.libargs=-d /dev/ttyS0(9)在主板目录下建议一个 Android 的主板配置文件 AndroidBoard.mk,此文件是编译系统接口文件,内容如下:# make file for new hardware from #LOCAL_PATH := $(call my-dir)# this is here to use the pre-built kernelifeq ($(TARGET_PREBUILT_KERNEL),)TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/ker
15、nelendiffile := $(INSTALLED_KERNEL_TARGET)ALL_PREBUILT += $(file)$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)$(transform-prebuilt-to-target)# no boot loader, so we dont need any of that stuff. #LOCAL_PATH := vendor/ardent/merlininclude $(CLEAR_VARS)# include more board specific stuff here? Such as Au
16、dio parameters. #(10)编译新的项目. build/envsetup.shmake PRODUCT-MTP-user补充内容:(1)上面的新建的几个文件的编写可以参考 build/target/board/generic 目录下的AndroidBoard.mk,BoardConfig.mk 和 system.prop(2)产品 makefile 的编写规则,变量定义解释如下:PRODUCT_NAME 终端用户可见的产品名称,对应到“Settings “中的“About the phone”信息 PRODUCT_MODEL End-user-visible name for t
17、he end product PRODUCT_LOCALES 1 个以空格分隔开的两个字母的语言码加上 2 字节的国家码的列表,影响到“Settings“中的语言,时间,日期和货币格式设置,举例:en_GB de_DE es_ES fr_CAPRODUCT_PACKAGES 需要安装的 APK 应用程序列表PRODUCT_DEVICE 工作设计名称,即主板名称PRODUCT_MANUFACTURER 生产厂家PRODUCT_BRAND 软件设计针对的客户品牌 PRODUCT_PROPERTY_OVERRIDES 以“key=value“为格式的属性列表PRODUCT_COPY_FILES 文件
18、复制列表,格式为“原文件路径:目的文件路径” ,编译过程中会按照此规则复制文件 PRODUCT_OTA_PUBLIC_KEYS 产品的 OTA 公共密匙列表PRODUCT_POLICY 声明此产品使用的政策 PRODUCT_PACKAGE_OVERLAYS 指示是否使用默认资源或添加任何产品特定的资源,例如:vendor/acme/overlayPRODUCT_CONTRIBUTORS_FILE HTML 文件中包含项目的贡献者 PRODUCT_TAGS 以空格分隔开的指定产品关键词列表本文来自 CSDN 博客,转载请标明出处:ttp:/ ubifs 文件系统1,安装相关的软件包apt-get
19、 install liblzo2-dev2,获取相关的工具 mkfs.ubifs 和 ubinize这两个工具是制作 ubifs 文件系统的时候用到,它们是 mtd-utils 工具包中的内容,mtd-utils 工具包你可以从下面的网站下载和编译出来:官方网站:http:/www.linux-mtd.infradead.org/index.html资源下载网站:http:/git.infradead.org/3,创建一个 create-ubifs.sh 脚本,主要是调用 mkfs.ubifs 和 ubinize 工具和相关参数来制作 ubifs 文件系统,内容如下:#!/bin/bash#
20、Script to generate ubifs filesystem image. # ubinize configuration fileconfig_file=rootfs_ubinize.cfg# Function to check result of the commandcheck_result() if $? -ne 0 thenecho “FAILED“elseecho “SUCCESSFUL“fi# Function to check whether an application existscheck_program() for cmd in “$“dowhich $cmd
21、 /dev/null 2&1if $? -ne 0 thenechoecho “Cannot find command “$cmd“echoexit 1fidoneif $# -ne 5 thenechoecho Usage: create-ubifs.sh page_size_in_bytes pages_per_block partition_size_in_bytes blocks_per_device path_to_rootfsechoexitfipage_size_in_bytes=$1echo “Page size $page_size_in_bytesbytes.“pages_
22、per_block=$2echo “Pages per block $pages_per_block“partition_size_in_bytes=$3echo “File-system partition size $partition_size_in_bytesbytes.“blocks_per_device=$4echo “Blocks per device $blocks_per_device“path_to_rootfs=$5# wear_level_reserved_blocks is 1% of total blcoks per devicewear_level_reserve
23、d_blocks=expr $blocks_per_device / 100echo “Reserved blocks for wear level $wear_level_reserved_blocks“#logical_erase_block_size is physical erase block size minus 2 pages for UBIlogical_pages_per_block=expr $pages_per_block - 2logical_erase_block_size=expr $page_size_in_bytes * $logical_pages_per_b
24、lockecho “Logical erase block size $logical_erase_block_sizebytes.“#Block size = page_size * pages_per_blockblock_size=expr $page_size_in_bytes * $pages_per_blockecho “Block size $block_sizebytes.“#physical blocks on a partition = partition size / block sizepartition_physical_blocks=expr $partition_
25、size_in_bytes / $block_sizeecho “Physical blocks in a partition $partition_physical_blocks“#Logical blocks on a partition = physical blocks on a partitiion - reserved for wear levelpatition_logical_blocks=expr $partition_physical_blocks - $wear_level_reserved_blocksecho “Logical blocks in a partitio
26、n $patition_logical_blocks“#File-system volume = Logical blocks in a partition * Logical erase block sizefs_vol_size=expr $patition_logical_blocks * $logical_erase_block_sizeecho “File-system volume $fs_vol_sizebytes.“echoecho “Generating configuration file.“echo “rootfs-volume“ $config_fileecho “mo
27、de=ubi“ $config_fileecho “image=rootfs_ubifs.img“ $config_fileecho “vol_id=0“ $config_fileecho “vol_size=$fs_vol_size“ $config_fileecho “vol_type=dynamic“ $config_fileecho “vol_name=system“ $config_fileecho# Note: Check necessary program for installation#echo -n “Checking necessary program for insta
28、llation.“#check_program mkfs.ubifs ubinize#echo “Done“#Generate ubifs imageecho -n “Generating ubifs.“./mkfs.ubifs -x lzo -m $page_size_in_bytes -e $logical_erase_block_size -c $patition_logical_blocks -o rootfs_ubifs.img -d $path_to_rootfscheck_resultecho -n “Generating ubi image out of the ubifs.“
29、./ubinize -o ubi.img -m $page_size_in_bytes -p $block_size -s $page_size_in_bytes $config_file -vcheck_resultrm -f rootfs_ubifs.imgrm -f $config_file(4)将 mkfs.ubifs 和 ubinize 以及 create-ubifs.sh 放置在同一目录下,然后调用 create-ubifs.sh 即可创建 ubifs文件系统,create-ubifs.sh 用法如下:create-ubifs.sh page_size_in_bytes(页大小)
30、pages_per_block(每个扇区的页数量) partition_size_in_bytes(分区大小) blocks_per_device( 扇区数量) path_to_rootfs(文件系统路径)举例如下:./create-ubifs.sh 2048 64 83886080 4096 ./rootfs上面命令的意思是调用 create-ubifs.sh 将当前目录下的 rootfs 文件夹的内容制作成 ubifs 文件系统,nand flash 的页大小为 2k,每个扇区有 64 页,总共有 4096 个扇区,要制作的文件系统的大小为 83886080 字节。本文来自 CSDN 博客
31、,转载请标明出处:http:/ 编译系统 makefile(Android.mk)写法android 编译系统的 makefile 文件 Android.mk 写法如下(1)Android.mk 文件首先需要指定 LOCAL_PATH 变量,用于查找源文件。由于一般情况下Android.mk 和需要编译的源文件在同一目录下,所以定义成如下形式:LOCAL_PATH:=$(call my-dir)上面的语句的意思是将 LOCAL_PATH 变量定义成本文件所在目录路径。(2)Android.mk 中可以定义多个编译模块,每个编译模块都是以 include $(CLEAR_VARS)开始以 inc
32、lude $(BUILD_XXX)结束。include $(CLEAR_VARS)CLEAR_VARS 由编译系统提供,指定让 GNU MAKEFILE 为你清除除 LOCAL_PATH 以外的所有LOCAL_XXX 变量,如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES 等。include $(BUILD_STATIC_LIBRARY)表示编译成静态库include $(BUILD_SHARED_LIBRARY)表示编译成动态库。include $(BUILD_EXECUTABLE)表示编译
33、成可执行程序(3)举例如下(frameworks/base/libs/audioflinger/Android.mk):LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) 模块一ifeq ($(AUDIO_POLICY_TEST),true)ENABLE_AUDIO_DUMP := trueendifLOCAL_SRC_FILES:= AudioHardwareGeneric.cpp AudioHardwareStub.cpp AudioHardwareInterface.cppifeq ($(ENABLE_AUDIO_DUMP),true)LOC
34、AL_SRC_FILES += AudioDumpInterface.cppLOCAL_CFLAGS += -DENABLE_AUDIO_DUMPendifLOCAL_SHARED_LIBRARIES := libcutils libutils libbinder libmedia libhardware_legacyifeq ($(strip $(BOARD_USES_GENERIC_AUDIO),true)LOCAL_CFLAGS += -DGENERIC_AUDIOendifLOCAL_MODULE:= libaudiointerfaceifeq ($(BOARD_HAVE_BLUETO
35、OTH),true)LOCAL_SRC_FILES += A2dpAudioInterface.cppLOCAL_SHARED_LIBRARIES += liba2dpLOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DPLOCAL_C_INCLUDES += $(call include-path-for, bluez)endifinclude $(BUILD_STATIC_LIBRARY) 模块一编译成静态库include $(CLEAR_VARS) 模块二LOCAL_SRC_FILES:= AudioPolicyManagerBase.cppLOCAL_
36、SHARED_LIBRARIES := libcutils libutils libmediaifeq ($(TARGET_SIMULATOR),true)LOCAL_LDLIBS += -ldlelseLOCAL_SHARED_LIBRARIES += libdlendifLOCAL_MODULE:= libaudiopolicybaseifeq ($(BOARD_HAVE_BLUETOOTH),true)LOCAL_CFLAGS += -DWITH_A2DPendififeq ($(AUDIO_POLICY_TEST),true)LOCAL_CFLAGS += -DAUDIO_POLICY
37、_TESTendifinclude $(BUILD_STATIC_LIBRARY) 模块二编译成静态库include $(CLEAR_VARS) 模块三LOCAL_SRC_FILES:= AudioFlinger.cpp AudioMixer.cpp.arm AudioResampler.cpp.arm AudioResamplerSinc.cpp.arm AudioResamplerCubic.cpp.arm AudioPolicyService.cppLOCAL_SHARED_LIBRARIES := libcutils libutils libbinder libmedia libhardware_legacyifeq ($(strip $(BOARD_USES_GENERIC_AUDIO),true)