Android源码编译
- 格式:docx
- 大小:397.32 KB
- 文档页数:6
v1.2.9 Android编译说明1. 编译前预处理 (1)1.1. 指定编译的产品名 (1)1.2. 执行编译的预处理 (2)1.3. 注意事项 (2)2. 编译Android代码 (2)3. 编译后处理 (3)3.1. 生成FLASH烧写用的IMG (3)3.2. 生成NFS用的文件目录 (3)4. 在vendor下创建一个产品名 (4)4.1. 新建产品目录 (4)4.2. 功能裁剪 (4)4.3. 注意事项 (5)由于Android目录下可以包含多个产品的编译规则,所以编译源码要经过以下几个步骤:l编译前预处理(make prebuild)l编译Android代码(make)l编译后处理(make firmware)1.编译前预处理1.1. 指定编译的产品名注意:1.发布的Android SDK软件包已经做好以下配置,默认为sdkDemo产品,可以直接跳到1.2的步骤。
2.如果要新建一个产品需要执行本小节1.1的操作。
3.新建产品请参见章节:在vendor下创建一个产品名需要确认根目录下是否有buildspec.mk文件,如果有确认该文件内配置的产品名是否正确,例如sdkDemo的产品,则该文件内配置为如下值:如果没有则拷($android)/build/buildspec.mk.default文件至根目录下,重复以上步骤。
1.2. 执行编译的预处理在根目录下敲入make prebuild该命令将执行一些产品相关功能的资源文件拷贝等操作。
1.3. 注意事项l此部分步骤在只需要执行一次,后续编译不用再执行此命令。
l如何确认当前配置的产品名?敲入make会立即弹出以下信息,确认下面的TARGET_PRODUCT字段值l当前目录有多少的产品名?Android代码中,用户自定义扩展的产品名都存放在vendor目录下2.编译Android代码在根目录下敲入make3.编译后处理3.1. 生成FLASH烧写用的IMG在根目录下敲入make firmware在($android)/rockdev/Image目录生成FLASH烧写用的IMG文件:3.2. 生成NFS用的文件目录在android根目录下运行make nfs命令,大约2分钟后在($android)/nfsImage目录生成NFS 用的文件:不推荐使用NFS方式,环境搭建较麻烦。
adb源码编译
ADB是AndroidDebugBridge的缩写,是一种用于Android设备和计算机之间通信的工具。
ADB源码是开源的,开发者可以通过编译ADB源码来自定义和扩展ADB的功能。
编译ADB源码需要准备好编译环境,并下载对应版本的Android 源码。
在编译环境准备完成后,按照以下步骤进行编译:
1. 进入Android源码根目录,运行以下命令:
$ source build/envsetup.sh
2. 在源码根目录下创建一个名为“device”的目录,并在该目录下创建一个名为“google”的目录,运行以下命令:
$ mkdir -p device/google
3. 将ADB源码拷贝到“device/google”目录下,并重命名为“adb”。
4. 进入“adb”目录,运行以下命令:
$ mm
5. 等待编译完成,生成的ADB可执行文件位于
“out/target/product/generic/system/bin/adb”。
编译完成后,可以将生成的ADB可执行文件替换系统中的默认ADB,或者将其作为独立的工具使用。
编译ADB源码可以为开发者提供更多自定义和扩展的功能,帮助开发者更好地调试和开发Android 应用。
- 1 -。
Android是个神奇的货,近两年比较火热,学习他的人也比较多,但是对于很多初学者来说比较头疼,(当然本人也很菜鸟),今天在学习一个安卓项目时,苦于找不到源代码,无奈只好下载网上现成的.apk文件,顿时好奇能不能反编译看到源代码呢?答案是肯定的!让我们行动起来!
首先,我们将文件的后缀名改为.zip。
这时候我们将可以解压这个文件,如图:
此处我们已经看到一个压缩文件了,打开它。
注意我们的重点是.dex 文件
这个classes.dex是个好东西呀!
然后,然后……
我们需要下两个软件:
dex2jar下载地址:/p/dex2jar/
JD-GUI下载地址:http://java.decompiler.free.fr/?q=jdgui
把我们刚找到的classes.dex拷贝到dex2jar的目录下吧(与dex2jar.bat在同一个目录下),然后运行dex2jar.bat classes.dex,将会生成一个文件classes_dex2jar.jar。
快OK 啦~~~~
运行jd-gui.exe 直接将classes_dex2jar.jar 拖进去吧,瞧!我们要的出来了!。
华为⼿机内核代码的编译及刷⼊教程【通过魔改华为P9AndroidKernel对抗反调试机制】0x00 写在前⾯攻防对⽴。
程序调试与反调试之间的对抗是⼀个永恒的主题。
在安卓逆向⼯程实践中,通过修改和编译安卓内核源码来对抗反调试是⼀种常见的⽅法。
但⽹上关于此类的资料⽐较少,且都是基于AOSP(即"Android 开放源代码项⽬",可以理解为原⽣安卓源码)进⾏修改,然后编译成⼆进制镜像再刷⼊Nexus 或者Pixel 等⾕歌亲⼉⼦⼿机。
但因为⾕歌的亲⼉⼦在国内没有⾏货销售渠道,市场占有率更多的是国产⼿机,⽽修改国产⼿机系统内核的教程却很少,加之部分国产⼿机的安卓内核和主线 AOSP 存在些许差异,照搬原⽣安卓代码的修改⽅法⽆法在国产⼿机上实现某些功能,甚⾄⽆法编译成功。
所以本⽂以某国产⼿机为例,通过研究其内核源码,对关键代码进⾏分析、修改,编译内核、打包成刷机镜像,对全过程予以展⽰。
0x01 常见反调试⼿段及对抗策略简介在安卓程序的开发过程中,反调试的⼿段有很多种,简单列举若⼲:(1) 检测特定进程或端⼝号。
如 IDA Pro 在对安卓应⽤进⾏调试时,需要在⼿机端启动调试程序 android_server ,该调试程序默认开启端⼝23946。
⽬标程序若发现⼿机⾥有 android_server 进程或开启了端⼝23946,⽬标程序就⾃动退出,以达到反调试的⽬的。
(2)检测某些关键⽂件的状态。
如⽬标程序在调试状态时,Linux内核会向部分系统⽂件内写⼊⼀些进程状态信息,包括但不限于向 “ /proc/⽬标程序pid/status ” 这⼀⽂件的 TracerPid 字段写⼊调试进程的 pid 。
有部分程序会检查这些字段,⽐如⽬标程序发现对应的 TracerPid 不等于 0 ,则说明⾃⼰本⾝正在被别的程序调试,⽐如:(Pid为19707的进程正在被Pid为24741的进程调试)(3)检测软件断点。
Android APK反编译得到Java源代码和资源文件一、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件工具下载:地址:/p/android-apktool/downloads/list如下图,途中红圈的两个都要下载。
将上面2个文件解压到同一个文件夹下面,将有3个文件被解压出来,如下图所示打开cmd命令行窗口定位到刚才解压的文件夹下,即apktool.bat所在的文件夹,如下图所示1. 将APK反编译将待反编译的apk文件放到c盘根目录下,特别注意,一定要放到根目录下。
输入反编译命令apktool d c:\xxxxx.apk c:\***文件夹命令行解释:apktool d [要反编译的apk文件] [输出文件夹]如:注意:demo文件夹不能是已存在的文件夹,否则会报错2. 将反编译完的文件重新打包成APK很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
二、反编译apk得到Java源代码工具下载:dex2jar:/p/dex2jar/downloads/listJD-GUI:/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zi p&can=2&q=如下图的两个文件:具体步骤:1. 解压上面两个压缩文件。
2. 从apk文件中解压出classes.dex,将它复制到dex2jar.bat所在的文件夹下3. 命令行下定位到dex2jar.bat所在的目录,然后运行dex2jar.bat classes.dex如图:注:classes.dex不一定要复制到这个文件夹下,在其前面加上路径也是一样的,这里只是为了输命令方便。
如上图所示,看到Done表示成功,将得到下图中红圈内所示的jar文件4. 然后双击jd-gui.exe,打开刚才生成的jar文件,即可看到下图如此,便可看到代码了。
附上上文中所有用到的工具:apk2android.rar在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。
systemui源码编译编译SystemUI源码是Android系统定制或开发的一部分。
SystemUI是Android系统的一个重要组件,负责管理和显示系统的用户界面,包括状态栏、通知栏、锁屏界面等。
编译SystemUI源码需要一定的技术和环境准备。
以下是编译SystemUI源码的一般步骤:1. 确保环境准备,首先需要安装好Java开发环境(JDK)、Android源码(AOSP)和相关的编译工具,比如Android Studio或者命令行工具。
2. 下载源码,获取最新的Android源码,可以从Google官方的AOSP仓库获取,也可以从其他定制ROM的源码仓库获取。
3. 配置编译环境,根据Android官方文档或者ROM定制商的指引,配置好编译环境,包括设置环境变量、下载相关依赖库等。
4. 选择目标,确定要编译的Android版本和目标设备,比如是要编译最新的Android版本,还是要为特定的设备进行定制开发。
5. 编译SystemUI,在编译环境下运行相应的编译命令,比如使用make或者其他编译工具来编译SystemUI源码。
6. 处理编译错误,在编译过程中可能会遇到各种编译错误,需要逐一解决这些错误,通常需要查看编译日志、修改代码等方式来解决。
7. 测试和部署,编译成功后,需要进行测试,确保编译的SystemUI可以正常工作,然后将编译好的SystemUI部署到目标设备上进行验证。
需要注意的是,编译SystemUI源码需要一定的编程和系统定制经验,还需要对Android系统架构和编译流程有一定的了解。
在编译过程中可能会遇到各种问题,需要有一定的解决问题的能力。
同时,由于涉及到Android系统的定制开发,需要遵守相关的法律法规和Google的开发规范。
希望以上信息对你有所帮助。
Android Apk反编译取得Java源代码
大伙儿做Android开发,看到他人应用里一些好的功能,是不是很想取得源码,借鉴一下?既然Android 是用JAVA开发的,那么咱们就能够够很容易的通过反编译的到应用的源代码。
下面我简单介绍下应该怎么操作。
具体步骤:
1.第一将apk文件后缀改成RAR并解压。
2.解压rar文件,取得其中的文件
3.
4.咱们需要用到dex2jar 把dex文件转为jar文件。
把解压取得的文件放入所在目录)
打开DOS命令行,进入dex2jar所在目录,运行生成4.最后用打开生成的咱们就能够够开到应用的源代码了。
5.用的的工具下载地址
:
Jd-gui:
更多文章资源: 博客园爱加密。
android hal文件编译规则
Android HAL (Hardware Abstraction Layer) 文件是 Android 系统中的一种接口定义文件,用于描述硬件设备与 Android 系统之间的交互方式。
为了在 Android 系统中使用这些硬件设备,需要进行相应的 HAL 文件编译。
在 Android 系统中,HAL 文件的编译规则主要包括以下几个步骤:
1. 编写 HAL 文件:首先需要编写相应的 HAL 文件,该文件描述了硬件设备的接口、属性、方法等信息。
编写完成后,需要将其放置在 Android 源代码的对应目录下。
2. 编译 HAL 文件:在 Android 源代码的编译过程中,会自动编译所有的HAL 文件。
编译后的 HAL 文件会被生成到 Android 系统的输出目录中,通常是 out/target/product/<device_name>/system/lib/hw/。
3. 将 HAL 文件安装到设备:在将 Android 系统镜像烧写到设备后,需要将编译好的 HAL 文件复制到设备的对应目录下。
具体路径可以根据实际情况而定,但通常是在 /system/lib/hw/ 目录下。
4. 配置系统参数:在启动 Android 系统时,需要配置相应的系统参数,以加载相应的 HAL 模块。
具体的配置方式可以通过修改文件或者在启动参数中添加相应的参数来实现。
需要注意的是,具体的编译规则和步骤可能会因不同的 Android 版本和设备厂商而有所不同。
因此,在实际操作过程中,建议参考具体的 Android 版本和设备厂商提供的文档和指南。
Android编译系统(Android.mk⽂件详解)【Android-NDK(Native Development Kit) docs⽂档】NDK提供了⼀系列的⼯具,帮助开发者快速开发C(或C++)的动态库,并能⾃动将so和java应⽤⼀起打包成apk。
Android.mk⽂件是GNU Makefile的⼀⼩部分,它⽤来对Android程序进⾏编译。
因为所有的编译⽂件都在同⼀个 GNU MAKE 执⾏环境中进⾏执⾏,⽽Android.mk中所有的变量都是全局的。
因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义。
⼀个Android.mk⽂件可以编译多个模块,每个模块属下列类型之⼀:1)APK程序⼀般的Android程序,编译打包⽣成apk⽂件2)JAVA库java类库,编译打包⽣成jar⽂件3)C\C++应⽤程序可执⾏的C\C++应⽤程序4)C\C++静态库编译⽣成C\C++静态库,并打包成.a⽂件5)C\C++共享库编译⽣成共享库(动态链接库),并打包成.so⽂,有且只有共享库才能被安装/复制到您的应⽤软件(APK)包中。
可以在每⼀个Android.mk file 中定义⼀个或多个模块,你也可以在⼏个模块中使⽤同⼀个源代码⽂件。
编译系统为你处理许多细节问题。
例如,你不需要在你的 Android.mk 中列出头⽂件和依赖⽂件。
编译系统将会为你⾃动处理这些问题。
这也意味着,在升级 NDK 后,你应该得到新的toolchain/platform⽀持,⽽且不需要改变你的 Android.mk ⽂件。
注意,NDK的Anroid.mk语法同公开发布的Android平台开源代码的Anroid.mk语法很接近,然⽽编译系统实现他们的⽅式却是不同的,这是故意这样设计的,可以让程序开发⼈员重⽤外部库的源代码更容易。
在描述语法细节之前,咱们来看⼀个简单的"hello world"的例⼦,⽐如,下⾯的⽂件:sources/helloworld/helloworld.csources/helloworld/Android.mk'helloworld.c'是⼀个 JNI 共享库,实现返回"hello world"字符串的原⽣⽅法。
ndk源码编译NDK是AndroidNativeDevelopmentKit的缩写,是一个可以让开发者使用C和C++等语言进行Android应用开发的工具集。
在使用NDK 时,需要先将NDK源码编译成可执行文件,然后再将自己的代码与NDK调用库链接起来。
本文将介绍NDK源码编译的具体步骤。
1. 下载NDK源码NDK源码可以在官网上下载,也可以在GitHub上获取。
下载完成后,将源码解压到本地文件夹中。
2. 安装依赖项在编译NDK源码之前,需要安装一些依赖项,例如GNU GCC、GNU binutils、GNU make、flex、bison等。
可以使用以下命令在Ubuntu 系统中安装:sudo apt-get install build-essentialsudo apt-get install gcc-multilibsudo apt-get install g++-multilibsudo apt-get install lib32z1-devsudo apt-get install libssl-devsudo apt-get install libncurses5-devsudo apt-get install libgtk2.0-dev3. 设置环境变量为了让编译器可以找到正确的工具链和库文件,需要设置一些环境变量。
可以在.bashrc文件中添加以下内容:export NDK_ROOT=/path/to/ndkexportPATH=$PATH:$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/p rebuilt/linux-x86_64/binexport PATH=$PATH:$NDK_ROOT/build/toolsexport PATH=$PATH:$NDK_ROOT/prebuilt/linux-x86_64/bin4. 编译NDK源码在进入NDK源码目录后,可以使用以下命令编译:./build/tools/make-standalone-toolchain.sh--platform=android-21 --install-dir=/path/to/toolchain 其中,--platform参数指定了目标平台的API版本,--install-dir参数指定了编译后的工具链安装目录。
【转】Android编译系统详解(三)——编译流程详解原⽂⽹址:本⽂原创作者: 欢迎转载,请注明出处和1.概述编译Android的第三步是使⽤mka命令进⾏编译,当然我们也可以使⽤make –j4,但是推荐使⽤mka命令。
因为mka将⾃动计算-j选项的数字,让我们不⽤纠结这个数字到底是多少(这个数字其实就是所有cpu的核⼼数)。
在编译时我们可以带上我们需要编译的⽬标,假设你想⽣成recovery,那么使⽤mka recoveryimage,如果想⽣成ota包,那么需要使⽤mka otapackage,后续会介绍所有可以使⽤的⽬标。
另外注意有⼀些⽬标只是起到修饰的作⽤,也就是说需要和其它⽬标⼀起使⽤,共有4个⽤于修饰的伪⽬标:1) showcommands 显⽰编译过程中使⽤的命令2) incrementaljavac⽤于增量编译java代码3) checkbuild⽤于检验那些需要检验的模块4) all如果使⽤all修饰编译⽬标,会编译所有模块研究Android编译系统时最头疼的可能是变量,成百个变量我们⽆法记住其含义,也不知道这些变量会是什么值,为此我专门做了⼀个编译变量的参考⽹站,你可以在该⽹站查找变量,它能告诉你变量的含义,也会给出你该变量的⽰例值,另外也详细解释了编译系统⾥每个Makefile的作⽤,这样你在看编译系统的代码时不⾄于⼀头雾⽔。
编译的核⼼⽂件是和,main.mk主要作⽤是检查编译环境是否符合要求,确定产品配置,决定产品需要使⽤的模块,并定义了许多⽬标供开发者使⽤,⽐如droid,sdk等⽬标,但是⽣成这些⽬标的规则主要在Makefile⾥定义,⽽内核的编译规则放在build/core/task/kernel.mk我们将先整体介绍main.mk的执⾏流程,然后再针对在Linux上编译默认⽬标时使⽤的关键代码进⾏分析。
Makefile主要定义了各个⽬标的⽣成规则,因此不再详细介绍它的执⾏流程,若有兴趣看每个⽬标的⽣成规则,可查看2. main.mk执⾏流程2.1 检验编译环境并建⽴产品配置1) 设置Shell变量为bash,不能使⽤其它shell2) 关闭make的suffix规则,rcs/sccs规则,并设置⼀个规则: 当某个规则失败了,就删除所有⽬标3) 检验make的版本,cygwin可使⽤任意版本make,但是linux或者mac只能使⽤3.81版本或者3.82版本4) 设置PWD,TOP,TOPDIR,BUILD_SYSTEM等变量,定义了默认⽬标变量,但是暂时并未定义默认⽬标的⽣成规则5) 包含,该makefile定义了两个⽬标help和out, help⽤于显⽰帮助,out⽤于检验编译系统是否正确6) 包含,config.mk作了很多配置,包括产品配置,包含该makefile后,会建⽴输出⽬录系列的变量,还会建⽴PRODUCT系列变量,后续介绍产品配置时,对此会有更多详细介绍7) 包含,该makefile会包含所有⼯程的CleanSpec.mk,写了CleanSpec.mk的⼯程会定义每次编译前的特殊清理步骤,cleanbuild.mk会执⾏这些清除步骤8) 检验编译环境,先检测上次编译结果,如果上次检验的版本和此次检验的版本⼀致,则不再检测,然后进⾏检测并将此次编译结果写⼊2.2 包含其它makefile及编译⽬标检测1) 如果⽬标⾥含有incrementaljavac,那么编译⽬标时将⽤incremental javac进⾏增量编译2) 设置EMMA_INSTRUMENT变量的值,emma是⽤于测试代码覆盖率的库3) 包含,该makefile定义了许多辅助函数4) 包含,该makefile定义了⾼通板⼦的⼀些辅助函数及宏5) 包含,该makefile定义了优化dex代码的⼀些宏6) 检测编译⽬标⾥是否有user,userdebug,eng,如果有则告诉⽤户放置在buildspec.mk或者使⽤lunch设置,检测TARGET_BUILD_VARIANT变量,看是否有效7) 包含, PDK主要是能提⾼现有设备升级能⼒,帮助设备制造商能更快的适配新版本的android2.3 根据TARGET_BUILD_VARIANT建⽴配置1) 如果编译⽬标⾥有sdk,win_sdk或者sdk_addon,那么设置is_sdk_build为true2) 如果定义了HAVE_SELINUX,那么编译时为build prop添加属性ro.build.selinux=13) 如果TARGET_BUILD_VARIANT是user或者userdebug,那么tags_to_install += debug 如果⽤户未定义DISABLE_DEXPREOPT为true,并且是user模式,那么将设置WITH_DEXPREOPT := true,该选项将开启apk的预优化,即将apk分成odex代码⽂件和apk资源⽂件4) 判断enable_target_debugging变量,默认是true,当build_variant是user时,则它是false。
Android编译小知识之LOCAL_MODULE_TAGS展开全文在介绍LOCAL_MODULE_TAGS 之前,先介绍一下编译源码的一个小知识,一般编译源码时先第一步、执行“source build/envsetup.sh”引入了build/envsetup.sh脚本。
该脚本的作用是初始化编译环境,并引入一些辅助的 Shell 函数该文件中还定义了其他一些常用的函数名称说明croot 切换到源码树的根目录m 在源码树的根目录执行 makemm Build 当前目录下的模块mmm Build 指定目录下的模块cgrep 在所有 C/C++ 文件上执行 grepjgrep 在所有 Java 文件上执行 grepresgrep 在所有 res/*.xml 文件上执行 grepgodir 转到包含某个文件的目录路径printconfig 显示当前 Build 的配置信息add_lunch_combo 在 lunch 函数的菜单中添加一个条目第二步“lunch XXX-YYY”是调用lunch 函数,并指定参数为“XXX-YYY”。
lunch 函数的参数用来指定此次编译的目标设备以及编译类型。
在这里,这两个值分别是“XXX”和“YYY”。
“XXX”是Android 源码中已经定义好的一种产品。
YYY是编译类型会影响最终系统中包含的模块第三步,执行make命令其中第二步和第三步可以合并为makePRODUCT-XXX-YYY,如makePRODUCT-full-engLOCAL_MODULE_TAGS := user debug eng tests optionaluser: 指该模块只在user版本下才编译(makePRODUCT-XXX-user,当时用tags=user时,日志如下:build/core/base_rules.mk:67: * Module is attempting to use the 'user' tag. Thisbuild/core/base_rules.mk:68: * used to cause the module to be installed automatically.build/core/base_rules.mk:69: * Now, the module must be listed in the PRODUCT_PACKAGESbuild/core/base_rules.mk:70: * section of a product makefile to have it installed.build/core/base_rules.mk:71: *build/core/base_rules.mk:72: *** user tag detected on module.。
9个⾮常棒的Android代码编辑器移动开发者的最爱在⽹络信息⾼速发展的今天,移动设备的⽅便快捷已经深⼊⼈⼼,越来越多的开发⼈员会选择在移动设备上查看或编辑源代码。
于是,Android平台上⼤量基于代码编程的应⽤应运⽽⽣,⾕歌应⽤商店⾥的代码编辑器、编译器和开发环境⽐⽐皆是。
由于不同⼯具的特性和缺点不尽相同,因此如何选择⼀款最适合⾃⼰的开发⼯具便成了⼀件头疼的事情。
在这⾥,我们针对移动开发⼈员列出了9个⾮常有⽤的Android代码编辑器。
TOP1:Code PeekerCode Peeker可以让语法⾼亮显⽰并允许你查找代码⽚段,且被Google Play选中作为教育项⽬的⼀部分。
Code Peeker可以打开和⾼亮任何⽀持的代码语⾔,如C/C++ 、C#、CSS、Java、JavaScript、PHP等。
它还可以标记重要代码的位置、内置⼀个⽂件浏览器、⽀持内外部SD卡,同时也⽀持其他⽂件浏览器,如Dropbox等。
TOP2:Terminal IDETerminal IDE是⼀个⾼度可扩展的终端应⽤程序。
它具有完整的Java/C/C++/HTML/Android开发⼯具包,并且可以在任何Android设备上运⾏。
同时它还在编辑器中设置了C/java/HTML作为开发⼈员开发的主要选择项。
TOP3:Syntax Highlighted Code EditorSyntax Highlighted Code Editor⽀持HTML、CSS、JavaScript、PHP、Python、Java、C、C++、CoffeeScript、Haskell、Clojure和Groovy。
虽然它主要定位的是Web开发,但是Java编码员也可以使⽤它。
Syntax Highlighted本⾝携有很多功能,如查找/替换、撤销和重做功能。
TOP4:DeuterIDE——编译器和IDEDeuterIDE是⼀款基于移动开发的⽂本编辑器,其内置⽀持Android的集成开发环境。
源码编译aidl
aidl是Android中用于IPC(进程间通信)的一种机制。
为了让自己对aidl有更深入的理解,我们需要自己来编译一个aidl源码。
首先,我们需要从AOSP(Android开源项目)中下载源码。
可以在官网上下载,也可以使用git clone命令进行下载。
下载完源码后,进入到目录/system/core/libutils下,找到aidl文件夹。
在aidl文件夹下,我们可以看到一个Android.bp文件和一个CMakeLists.txt文件。
这些文件是用于编译aidl的配置文件。
Android.bp是用于Android Studio等集成开发环境的,而CMakeLists.txt是用于命令行编译的。
接着,我们需要使用命令行进行编译。
进入到aidl文件夹下,运行以下命令:
$ mkdir build # 创建一个build文件夹
$ cd build # 进入到build文件夹
$ cmake .. # 使用CMakeLists.txt进行配置
$ make # 进行编译
编译完成后,我们可以在build/bin目录下看到一个aidl可执行文件。
这个文件就是我们刚刚编译的aidl。
aidl的编译并不复杂,但是对于我们理解aidl的原理和机制有很大的帮助。
通过编译aidl源码,我们可以更深入地了解AOSP和Android系统的运作方式。
- 1 -。
通过清华⼤学镜像下载Android源码并编译源码之前看源码都是在Windows下⽤SourceInsight看,虽然达到了研究源码的效果,但终究还是有遗憾。
趁着周末,准备在Ubuntu虚拟机上下载编译源码。
之前下源码时,有了解⼀些Android源码的情况。
⽹上的教程很多也是从⾕歌官⽹下源码,但是最近蓝灯不好⽤,FQ效率有点低,⽽且FQ 的⽹速肯定⽆法和国内的⽹速相⽐。
所以,从国内的镜像下载源码⽆疑是个更好的选择。
国内的镜像也有好⼏个,不过我最终选择了清华⼤学的镜像,也许这是学⽣时代的情怀影响了我。
根据教程内容,下载Android源码。
中间也遇到⼏个坑。
以下是下载步骤:1.打开终端2.依次输⼊以下命令:mkdir ~/binPATH=~/bin:$PATHcurl https:///git/git-repo -o ~/bin/repo #使⽤tuna的git-repo镜像chmod a+x ~/bin/repo3.打开bin⽂件夹下的repo⽂件,将REPO_URL = 'https:///git-repo'改为REPO_URL = 'https:///git/git-repo'4.使⽤每⽉更新的初始化包。
使⽤⽅法如下:wget -c https:///aosp-monthly/aosp-latest.tar # 下载初始化包tar xf aosp-latest.tarcd aosp# 解压得到的 aosp⼯程⽬录# 这时 ls 的话什么也看不到,因为只有⼀个隐藏的 .repo ⽬录repo sync # 正常同步⼀遍即可得到完整⽬录# 或 repo sync -l 仅checkout代码初始化包有40多G,趁着昨晚⽹速快,电脑下着,⾃⼰先去睡觉了,第⼆天起来已经下好了。
执⾏最后⼀⾏命令结束后,aosp⽂件夹⾥可以看到源码,这个源码是最新的(Android P),要其他版本的源码的话,可以切其他分⽀。
Android4.1.4编译1、下载源码:我是在ics版本的基础上通过repo sync更新,发现有了android 4_1_r1的分支,等待更新完,repo branch 切换分支,然后. Build/envsetup.she 然后lunch 1 选择full-eng 最后make ,过一会报错。
提示:build/core/product_config.mk:193: *** _nic.PRODUCTS.[[build/target/product/vbox_x86.mk]]: "frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk" does not exist. Stop.** Don't have a product spec for: 'full'** Do you have the right repo manifest?Google baidu bing了大半天终于在android的bug单中找到了这条bug,解答是源码不全。
愁了半天,repo sync 都是最新的,愁了半天,最后再ics的repo中重新下了个android4.1.4的分支。
repo init -u https:///platform/manifest -b android-4.1.1_r4repo sync下载3个小时,终于下载完成,本来下载源码需要很长时间5~10个小时,由于再ics的基础上下载,只需要把patch下载就行了(repo会自动完成)。
兴奋啊,赶紧.Build/envsetup.shlunch 1 full-eng警告:/bin/bash:prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gcc: 无法执行二进制文件/bin/bash:prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gcc: 无法执行二进制文件/bin/bash:prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gcc: 无法执行二进制文件先没管它,继续机制行make cleanmake -j8过了几分钟提示错误:host StaticLib: libhost (out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a)ERROR:prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linu x-ar only run on 64-bit linuxmake: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a] 错误 1host C: emulator-target-i386 <= external/qemu/cpus.chost C: emulator-target-i386 <= external/qemu/arch_init.chost C: emulator-target-i386 <= external/qemu/os-posix.chost C: emulator-target-i386 <= external/qemu/oslib-posix.chost C: emulator64-arm <= external/qemu/audio/audio.chost C: emulator64-arm <= external/qemu/disas.cERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linuxmake: *** [out/host/linux-x86/obj/EXECUTABLES/emulator64-arm_intermediates/disas.o] Error 1make: *** Waiting for unfinished jobs....ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linuxmake: *** [out/host/linux-x86/obj/EXECUTABLES/emulator64-arm_intermediates/audio/audio.o] Error 1又陷入郁闷,google baidu了好半天,都没找到解决方案,不过找到了提示,就是谷歌推荐使用64位的ubuntu 10.04 来编译,很多配置都是基于64来的,所以32位系统编译会遇到很多问题。
编译linphone-android前阵子公司要求从linphone的官网上把android客户端的源码下载下来,编译好。
但是下载好后按照README里面的步骤来做有一些小问题,在网上搜了一下,没有专门介绍怎么编译的帖子,经过研究,全部解决了。
所以记录下来帮助同样是刚刚上手的你。
(问题比较简单,希望高手不要见笑)。
PS:我是在CentOS6下编译的。
Ubuntu下编译的步骤相似,可以参考,而在windows下需要借助Cygwin交叉编译。
一、首先要从github上把源码下载下来,这需要安装git软件,这一步就不多做解释了,你只要百度一下git就可以了。
(注意下载好后要配置git下载的路径,这个只要在你想存放的地方右击鼠标init一下就行了)二、编译前我们要先下载几个依赖库,这其中有autoconf(yum install autoconf), automake (yum install automake),aclocal(yum install aclocal),libtoolize(yum install libtoolize),编译过程中还需要android-ndk-r5b以上版本的ndk支持,我用的是最新的r6b版本。
三、下载好后的源码包,不要做任何修改,按照README里面所说的先运行./prepare_sources.sh,但是你在shell里运行后会发现提示你没有这个文件,不要急,这是因为下载下来的源码包里的文件都是DOS格式的,在Linux下都无法识别,所以导致了路径问题,这时候需要你安装一个dos2unix的软件,在终端里输入yum install dos2unix,安装好后,打开终端,定位到你下载好的linphone-android文件夹根目录,输入find -type f | xargs dos2unix --dos2unix --safe或者find -type f | xargs dos2unix -o,这个两个命令都可以把文件夹里所有的文件转为unix格式。
Android源码编译开发工具:Ubuntu10.04在Ubuntu下使用root用户登录,注意root一开始是锁定的,使用如下命令解锁:sudopasswd root 按回车铵,提示输入当前密码,在提示输入二次密码。
输入完成切换用户使用root用户登录。
Android源码结构Makefile (全局的Makefile)bionic (Bionic含义为仿生,这里面是一些基础的库的源代码)bootloader(引导加载器)build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)dalvik (JAVA虚拟机)development(程序开发所需要的模板和工具)external (目标机器使用的一些库)frameworks (应用程序的框架层)hardware (与硬件相关的库)kernel (Linux2.6的源代码)packages (Android的各种应用程序)prebuil (Android在各种平台下编译的预置脚本)recovery (与目标的恢复功能相关)system (Android的底层的一些库)Out (编译好的文件)编译Android源码必需的安装的软件包g++库文件有可能Ubuntu自带,使用g++ -v命令查找是否安装,如果没有自带请手动安装,使用如下命令,sudo apt-get-install g++-4.4.注意:g++分很多版本,如果使用了最新版本4.6将没办法编译,建议安装4.4版本Gcc库文件有可能Ubuntu自带,使用gcc–v命令查找是否安装,如果没有自带使用如下命令手动安装,sudo apt-get-install gcc-4.4.注意:gcc分很多版本,如果使用了最新版本4.6将没办法编译,建议安装4.4版本不过还有一些应该是linux系统自带的,如果缺少就按照提示install一下sudo apt-get install build-essentialsudo apt-get install makesudo apt-get install libc6-devsudo apt-get install patchsudo apt-get install texinfosudo apt-get install libncurses-devsudo apt-get install git-core gnupgsudo apt-get install flex bison gperflibsdl-dev libesd0-devlibwxgtk2.6-dev build-essential zip curlsudo apt-get install ncurses-devsudo apt-get install zlib1g-devsudo apt-get install valgrindsudo apt-get install python2.5安装java环境首先从sun官方网站下载jdk-6u16-linux-i586.bin文件并安装它。
使用./jdk-6u16-linux-i586.bin命令进行安装Java jdk环境变量配置,打开系统文件找到etc/profile文件打开将如下代码复制到,倒数第二行,注销用户才能生效export JAVA_HOME=/usr/java/jdk1.6.0_14export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar注意:如果编译Android2.3源码就要安装程1.6版本的JDK,编译Android2.2源码就要安装1.5JDK。
配置jdk环境变量方法有好几种,那也是对应你ubuntu版本定,如果你使用ubuntu10.04请照以上方法配置.还有一点要注意的是在etc/environment文件配置坏境变量,下次启动ubuntu将无法登录.源码编译步骤注意arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu 和arm-2010q1 拷贝到/opt/目录下编译rootfs进入源码跟目录输入如下命令. build/envsetup.sh(注意:”.”与build有个空格)Lunch输入12(注意:编译Android2.3源码才能输入12)Make update-api更新apimake编译rootfs需要2到5个小时,可能出现的错误如:1.找不到命令,说明所需要的库文件没安装解决方法,输入如下命令安装库文件sudo apt-get install git-core flex bison gperflibsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-devsudo apt-get install git-core gnupg flex bison gperf build-essentialsudo apt-get install zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libssudo apt-get install x11proto-core-dev libx11-dev lib32readline5-dev lib32z-devsudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodospython-markdownsudo apt-get install libxml2-utils2.如果出现如下错误是JDK没安装好或配置环境变量配错解决方法使用命令Java –version查看是否JDK安装成功首先从sun官方网站下载jdk-6u16-linux-i586.bin文件并安装它。
使用./jdk-6u16-linux-i586.bin命令进行安装Java jdk环境变量配置,打开系统文件找到etc/profile文件打开将如下代码复制到倒数第二行,注销用户才能生效export JAVA_HOME=/usr/java/jdk1.6.0_14export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar3.提示只能在64位系统下编译Checking build tools versions...build/core/main.mk:76: ********************************************** **************build/core/main.mk:77: You are attempting to build on a 64-bit system. build/core/main.mk:78: Only 64-bit build environments are supported b eyond froyo/2.2.build/core/main.mk:79: ********************************************** **************build/core/main.mk:80: *** stop。
停止。
解决方法因为Android2.3默认是64位的系统上编译,需要手动修改build/core/main.mk,把这个判断部分注释掉:#ifneq (64,$(findstring 64,$(build_arch)))#$(warning ********************************************************** **)#$(warning You are attempting to build on a 32-bit system.)#$(warning Only 64-bit build environments are supported beyond froyo/ 2.2.)#$(warning ********************************************************** **)#$(error stop)#endif4.提示如下错误,gcc库文件版本不对解决方法使用命令gcc–v查看gcc库文件信息,删除当前gcc库文件,重新安装4.4.3版本5.提示g++找不到命令,出现如下错误解决方法使用命令g++ -v查看g++库文件信息.打开ubuntu自带的新立得, 输入g++找到g++4.4.3版本,打勾点应用进行安装编辑kernel进入andorid源码的kernel目录Make meson_refc03_defconfigMake uImagecp arch/arm/boot/uImage ../out/target/product/c03ref/注意:编译出来的uimage文件大小3.6M左右编辑recovery进入android源码kernel目录.env.shMake meson_refc03_defconfigMake uImagecp arch/arm/boot/uImage ../out/target/product/c03ref/uImage_recovery 注意:编译recovery的文件为3.8M,如果小于2M将无法安装,解决方法,输入如下命令. env.shMake meson_refc03_defconfigMake menuconfig选择第一项找到如下项输入如下路径,完成记得保存重新编译kernel和recoveryAndroid源码打包,回到源码跟目录,输入如下命令. build/envsetup.shLunch12Make otapackage打包完成将放在../out/target/product/c03ref下1把自己项目copy到源码的packages/amlogic下2项目里的bin和get文件删除3添加Android.mk文件3修改Android.mk,添加如下代码#ifeq ($(BOARD_USE_DEFAULT_AML2DLAUNCHER_MBX),true)LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME :=com.hotel.jago.activity注意:这里是自己项目的包名LOCAL_CERTIFICATE := platformLOCAL_OVERRIDES_PACKAGES := Homeinclude $(BUILD_PACKAGE)#endif4打包自己的项目,在源代码跟目录输入如下命令. build/envsetup.shLunch12cd 进入自己项目的位置mmapk放在out/target/product/c03ref/system/appapk有关文件放在out/target/product/c03ref/obj/apps删除launchdevice/amlogic/c03ref/c03ref.mk打开删除有关launch代码out/target/product/c03ref/system/app找到有关的apk删除out/target/product/c03ref/obj/apps找到有关文件删除添加启动项在项目的资源文件(androidManifext.xml)添加如下代码<category android:name="android.intent.category.HOME" /><category android:name="android.intent.category.DEFAULT" />。