用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”
其中[email protected]为你自己的邮箱.
简要说明
android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.
源码下载
由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)
repo工具下载及安装
通过执行以下命令实现repo工具的下载和安装
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:
我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:
这里写图片描述
执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.
错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:
通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)
如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.
结束吧
到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.
‘贰’ 安卓app源码我有,怎么编译成app,编译之前我能不能修改呢
用android studio配置java的ellipse,可以修改
‘叁’ APP源码要用什么工具编译
sourceinsight是个代码浏览工具,它会自动对你的工程源码进行语法分析,方便你迅速查找对某个特定符号的引用。它本身不带编译器调试器,但是你可以指定要用的编译器,记得sourceinsight里有这个选项。1、->Removemissingfilefromproject选上可以避免因文件找不到而弹出错误对话框。把Misc->Usestricterconfirmationdialog选项去掉可以使确认时不输入"yes"。2、TypingSourceEditing->Indentcommandsaffect#-preprocessorstatements。去掉后(默认值),进行多行缩进时不会影响预处理语句(如#if#endif)。AutoCompletion->Usedetailedcompletionwindow,选上后,联想时可以出现该函数的详细信息。见下图:(简单)(详细)AutoCompletion->Insertparemetersforfunctions,去掉后,自动联想不会把整个参数都输出到当前行。BrowsinginLists->Matchsyllableswhiletyping(slower)。在symbollist框检索符号时是否采用音节匹配方式,如对于函数FindNext,输入find或者next都可以找到该函数。该功能可能导致反应缓慢(视工程和机器配置而定),建议关闭,因为即使在关闭状态下也可以通过先输入空格再输入单词来动态启用该功能。注意BrowsinginLists里其实有两个功能,但一般我们只能看到Matchsyllableswhiletyping这一条,应该是si的菜单设计没有做好,导致在中文windows下不能显示全,另一个功能是Matchmemberswhiletyping,用于打开/关闭按成员变量名来检索类/结构体的功能。3、FilesOpeningFiles->Sharing:Letotherprogramsmodifyfiles,以共享方式打开文件,这个很重要,保证可以在其它编辑中同时编辑该文件。典型的场景就是用ide环境去动态编译调试,而用si静态阅读。Customize'Open'Command,用于设置Ctrl+O打开的页面,默认选项是,建议保持默认。SavingFiles->,如果发现保存后就不能undo了,请检查该选项是否选中。。保存时自动去除每行尾部的空格和tab。建议选中。4、Languages自定义其它编程语言的语法解析,这个还是另写一篇来讲吧。ConditionalParsing不要错过了,这里的Conditions功能实在让人喜欢。Conditions是什么意思呢?我们的代码中一般都会有一些开关宏,通过在Conditions中配置这些宏的默认值,可以让si把配置为不开启的宏视为无效代码,从而不进行符号检索。如果源代码中的开关宏太多,还可以使用ConditionParsing中的ScanFiles来自动找出所有开关宏。5、SymbolLookups没太多特别的。6、Display显示配置和个人喜好和显示器的状态有关,偶用的x60小本,屏幕资源有限,所以在DisplayElements里把ProjectWindow,StatusBar,ToolBar,ClipWindow都关了,基本用快捷键可以代替它们。Options->。很多大师都教导我们说一行不要写太多代码。在这个指导思想下,我们不需要这个东东。Showexactcaseoffilenames。如果看不惯si把所有的文件名首字母都大写就勾上这个选项吧。。SourceLink很多时候用于外部命令输出结果的解析(如Make,lint),这个功能会把解析结果与目标窗口自动tile,很实用。Trimlongpathnameswithellipses。这个建议不要选中。事实上这个主要影响标题栏,但一般来说标题栏上的空间是充裕的,选上之后往往会令我们不知道所编辑文件的具体位置。
‘肆’ 我有apk文件源码,windows下用什么软件可以编译
Eclipse或者Android Studio
‘伍’ 如何单独编译Android源码中的模块
1.make 模块名称
需要查看Android.mk文件的LOCAL_PACKAGE_NAME变量。
2.mmm命令
用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。比如要编译Phone部分源码,需要在终端中执行以下命令:
$mmm packages/apps/phone
3.mm命令
用于在模块根目录编译这个模块。只能在第一次编译后使用。例如要编译Phone部分源码,需要在终端中执行以下命令:
$cd packages/apps/phone
$mm
注:mmm和mm命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文件。如果要编译模块的所有文件,需要-B选项,例如mm -B。
‘陆’ 网上下的APP源码,问问大佬怎么变成APK格式
到网上搜索下安卓开发环境搭建,用eclipse打开这个文件夹运行编译就可以了。
‘柒’ 有app源码如何编译
下载eclipse,搭建开发环境,然后在eclipse里面打开工程就好了
‘捌’ 如何把应用程序app编译进android系统
把常用的应用程序编译到img文件中,就成了系统的一部分,用户不必自己安装,当然也卸载不了;
同时也可以删减系统自带的应用程序,精简系统;
1.\build\target\proct 目录下generic.mk文件:
Java代码 收藏代码
PRODUCT_PACKAGES := \
AccountAndSyncSettings \
DeskClock \
AlarmProvider \
Bluetooth \
Calculator \
Calendar \
Camera \
testMid \
CertInstaller \
DrmProvider \
Email \
Gallery3D \
LatinIME \
Launcher2 \
Mms \
Music \
我们添加一个testMid \ 应用名称。
2.把testMid包放入
\packages\apps 目录下,修改android.mk文件。
Java代码 收藏代码
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := testMid
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
注:LOCAL_PACKAGE_NAME := testMid (包名必须和generic.mk中添加的相同)
编译源码,可以看到在
\out\target\proct\smdkv210\system\app
目录下生存了testMid.apk了。这时system.img也包含了此应用。
-------------------------------------------------------------------
特殊情况:有时,应用需要包含jar包,这时的app导入源码时会出现问题:
MODULE.TARGET.JAVA_LIBRARIES.libarity already defined by ... stop
由于 LOCAL_STATIC_JAVA_LIBRARIES := libarity 会引发错误信息。
目前解决方法是:
\build\core 目录下修改base_rules.mk
注释掉错误信息:
ifdef $(mole_id)
#$(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
endif
$(mole_id) := $(LOCAL_PATH)
--重新编译,这时可以通过了。
(2)、删除原厂(Telchips)带源码的应用程序,如DTV_DVBT
在/device/telechips/m801/device.mk
注释掉相应语句:
# PRODUCT_PACKAGES += \
# SampleDVBTPlayer \
同时,在/out/target/proct/m801/system/app 找到相应的.APK包,并删除。
‘玖’ 如何在android源码中编译androidstudio文件
在Android源码开发过程中,需要整合进第三方APP到系统中,作为内置应用。如果是第三方APP是以APK形式整合进项目中,那么根据平台和公司的要求,只需修改编译脚本就可以实现整合,这里不再赘述;本文讲解拿到的第三方app是源码,需要自己写android.mk文件实现编译apk功能。
现在Android app ide主要是两个工具eclipse和android studio。Eclipse已经从google的android开发者网站中移除了下载链接,现在主流的android app开发工具就是Android studio。