Exynos4412 Andriod4.4 源码编译生成SDK

     Androd4.4 的SDK可以从Android开发网站下载,也可以从Andorid4.4的源码中编译形成,如果您的产品对Android的Framework层进行了修改,增加了自己的API调用函数,那么就需要编译Andorid源码形成自己的SDK。另外想学习一下SDK的生成过程,那么本篇文章也会对您有所帮助。


源码下载

   我们发布的Android4.4源码可以成功编译Andorid镜像文件,烧写到板卡中运行,但是如果自己编译SDK,缺省的Android源码缺少SDK编译的必要文件,我们可以从Android的国内镜像使用repo工具进行下载。

 工具下载

 Android代码有N多个仓库组成,使用repo工具进行仓库的统一管理,假设需要下载的repo 工具存放于 /media/data/gitHub目录:

# cd /media/data/GitHub/

# git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/

 git-repo仓库下载完成后会看到该文件夹内有repo脚本文件:


   

假设我们的Android4.4代码存放在 /media/data/GitHub/iTop4412_KK4.4_git 目录:

   # cd  /media/data/GitHub/iTop4412_KK4.4_git

   # ../git-repo/repo init –u https://github.com/TOPEET-Develop/android.git -b exynos4412_android4.4.4_master -g all, -notdefault,tools

    

  注: repo init 命令中–u 参数指定android仓库下载地址,-b 参数指定仓库中的下载分支.这里我下载的是exynos4412_android4.4.4_master分支.

      另外务必要注意-g all, -notdefault,tools参数,如果没有这些参数下载的Android源码可以编译形成目标板卡运行的二进制文件,但是无法编译形成       SDK文件,如果您需要编译SDK请务必包含这些参数,包含这些参数以后,将下载Android所有源码。

 

下载过程中需要输入一些信息:

Your Name 输入root

Your Email: 直接回车即可,然后在输入y, 回车继续:


#../git-repo/repo  sync 

注: repo  sync 开始下载Android代码,下载过程与网络环境有一定的关系,笔者这边下载了4个小时的代码,如果下载过程中长时间没有进度显示,可以 ctrl+c终止下载,然后执行 repo  sync命令重新开始,repo命令支持断点续传,重新执行repo sync命令会继续上次的下载,下图为源码下载过程中的进度显示:

 

下图为Android源码全部下载完成:


   代码下载完成后会在  /media/data/GitHub/ iTop4412_KK4.4_git目录下面显示Android系统源码目录。Android4.4的源码大概20G,第一次下载过程比较漫长,请耐心等待。代码下载完成后,再次使用repo  sync 命令时,只更新升级代码,速度就比较快了。

     每个文件夹目录下面都会有一个或者多个Git仓库,默认这些仓库是没有分支的,我们需要使用repo start 命令创建分支,这里我们创建master分支,您也可以使用别的名字来定义分支名称,repo  branch命令可以查看创建的分支:


 #../git-repo/repo  start master  --all

 #../git-repo/repo  branch


我们在使用Eclipse或者Android Develop Tools进行APP开发时需要设置SDK,一般情况下我们在Android的官方网站下载Google编译好的SDK,这里我们介绍如何编译Android源码生成SDK

2 开始编译,生成SDK

执行命令开始编译Linux版本的SDK

 # cd /media/data/GitHub/iTop4412_KK4.4_git

 #export  JAVA_HOME=/usr/lib/jvm/jdk1.6.0_43

 #source  ./build/envsetup.sh

 #lunch sdk-eng

 #make -j4  sdk 2>&1 | tee log.txt

 

执行命令开始编译Windows版本的SDK

 # cd /media/data/GitHub/iTop4412_KK4.4_git

 #export  JAVA_HOME=/usr/lib/jvm/jdk1.6.0_43

 #source  ./build/envsetup.sh

 #lunch sdk-eng

 #make -j4  win_sdk 2>&1 | tee log.txt


注意:

      编译Windows版本的SDK首先会自动编译形成Linux版本的SDK,然后替代Linux SDK的部分文件最终形成Windows版本的SDK,而编译Linux版本的SDK不会自动编译Windows版本的SDK

     编译Windows版本的SDK务必在Linux的机器或者虚拟机进行,不支持Windows环境下面编译SDK,笔者在Ubuntu12.04虚拟机状态下编译Linux版本的SDKWindows版本的SDK

     笔者这里采用的是make –j4,这里的j4表示启动四个线程进行编译工作,笔者的机器是四核的,理想状态下是一个核心运行一个线程,您可以根据自己的CPU状况调整这个值,采用多线程方式可以加快SDK的编译过程,当然主机的CPU利用率也会很高。

    编译时间与您的PC配置有直接的关系,笔者采用主机Win7  64bit + Ubuntu虚拟机方式进行,CPUCore I5处理器,8G内存,Android4.4 SDK编译花费大约4个小时的时间。


Linux版本的SDK生成路径:

/media/data/GitHub/iTop4412_KK4.4_git/out/host/linux-x86/sdk


Windows版本的 SDK 生成路径:

/media/data/GitHub/iTop4412_KK4.4_git/out/host/windows/sdk


可以看到SDK里面包含常用的Android工具,比如fastboot,adb,当然也包含Android模拟器:



3  解决编译问题

   理想状态下我们执行了编译SDK的指令,只需要等待SDK的生成,而在实际的过程中编译会出现问题,笔者记录了编译过程中出现的错误信息,需要解决这些问题才可以生成目标SDK。

   我们在执行编译SDK的指令时,会把编译输出信息记录到日志文件 log.txt中,如果编译过程出现问题,我们需要打开log.txt文件,查找一下error信息,根据error信息判断是哪个环节出现了问题。

    另外笔者采用的是TOPEET发布的Ubuntu12.04 集成开发环境,集成编译环境的Ubuntu12.04已经安装好了必要的库文件和工具文件,这样编译Android SDK过程中会减少出错信息。


问题1:

 build/core/main.mk:662:***system/core/libmincrypt/Android.mksystem/core/libmincrypt/Android.mk: Module'libmincrypt'inPRODUCT_PACKAGES has nothing to install!. Stop.

解决办法:

修改 /media/data/GitHub/iTop4412_KK4.4_git/build/target/product/base.mk文件,去掉

libmincrypt库的编译:

 



问题2:

make: ***[out/target/product/generic/obj/SHARED_LIBRARIES/gralloc.goldfish_intermediates/gralloc.o]Error 1

 

解决办法:

 修改/media/data/GitHub/iTop4412_KK4.4_git/build/target/product/emulator.mk文件

 去掉 gralloc.goldfish 的编译。

 注意:删除gralloc.goldfish可能会导致模拟器运行Android时无法启动,如果您需要在PC的模拟器运行生成的Android,请注意这一点。




问题3:

device/samsung/common/libaudio/AudioHardware.h:35:25:fatal error: audio_codec.h: No such file or directory

compilation terminated.

make: ***[out/target/product/generic/obj/SHARED_LIBRARIES/audio.primary.generic_intermediates/AudioHardware.o]Error 1

解决办法:

  /media/data/GitHub/iTop4412_KK4.4_git/device/samsung/smdk4x12/conf/audio_codec.h文件拷贝到/media/data/GitHub/iTop4412_KK4.4_git/device/samsung/common/libaudio/目录下。

 

问题4:

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp:820:9:error: 'SecHdmiClient' is not a member of 'android'

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp:820:33:error: 'mHdmiClient' was not declared in this scope

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp:820:56:error: 'android::SecHdmiClient' has not been declared

make: ***[out/target/product/generic/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates/DisplayHardware/HWComposer.o]Error 1


解决办法:

 修改frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp  第820行,注释 :



问题5:

make: *** [out/target/common/docs/online-sdk-timestamp]Error 45

make: *** Waiting for unfinishedjobs....

make: ***[out/target/common/docs/hidden-timestamp] Error 45

DroidDoc took 199 sec. to write docs toout/target/common/docs/ds

解决办法:

  编译过程中如果出现 XXXX-timestamp Error的问题,统一采用建立相同名称的空文件方式,这些文件属于帮助文件,不影响SDK的使用。

比如这里使用touch命令建立两个文件:

#touch  out/target/common/docs/online-sdk-timestamp

#touch  out/target/common/docs/hidden-timestamp

    笔者在编译Android的 Linxu版本的SDK和Windows版本的SDK过程中遇到了上面的问题,解决后均可以通过编译。

另外Android源码路径:/media/data/GitHub/iTop4412_KK4.4_git/sdk/docs/目录下面有  howto_build_SDK.txt 文件,该文件是编译SDK的帮助文件,需要的时候可以打开阅读。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值