现仅就工作遇到的问题做个总结。所用硬件平台为amlogic stvm3。---------------------------------------------------------------------------关于版本号:文件build/core/version_defaults.mk用来检查一些跟版本相关的变量是否定义;如果未定义,则使用默认值。这些变量包括 PLATFORM_VERSION # 如 2.2.5 PLATFORM_SDK_VERSION # 8, 对应2.2.5 PLATFORM_VERSION_CODENAME # REL,即发行版 DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME BUILD_ID # 默认为UNKNOWN BUILD_NUMBER # 默认eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。 version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。---------------------------------------------------------------------------关于调试功能(adb)的开启编译android源码之前总是要先运行build/envsetup.sh,以初始化一些常用命令(实际上是bash的函数,如add_lunch_combo)。其中也从以下文件中引入了一些编译设置: device/${CHIPSET_VENDOR}/vendorsetup.sh我们这里使用的CHIPSET_VENDOR为amlogic。比如我们有文件device/amlogic/vendorsetup.sh,内容为"产品名-编译类型(flavor)"列表(称为combo),如下: add_lunch_combo m1ref-eng add_lunch_combo m1ref-user add_lunch_combo m2ref-eng add_lunch_combo m2ref-user add_lunch_combo stvm3-eng add_lunch_combo stvm3-user其中,m1ref和stvm3是产品名(作前缀),后面为编译类型。除此前缀外可选的combo值有: eng, user, userdebug, tests。(参考文件build/core/main.mk中对于变量TARGET_BUILD_VARIANT的筛查条件)我们可以修改vendorsetup.sh文件,来改变为特定设备编译的结果。以下是各个编译类型的特点: eng: 工程模式,用于平台级的调试,是默认的编译类型。
2. 用别人的android代码怎么修改
1、可以使用 eclipse 来编辑 java 程序、检查错误(主要是类库包含和语法方面),但是不能在 eclipse 上编译运行 android 源码,还是得在 shell 中 make(或 mm 或 mmm)
2、android 源码文件夹里提供有一些 eclipse 配置文件, .claapath:eclipse 工程的配置文件,方便我们直接把 android 源码相应的文件和 JAVA 包导入工程 android-formatting.xml 和 android.importorder:这个很重要,主要是用来规范我们的编码风格,更容 易使我们的代码风格一致
3、把 android 源码作为一个工程导入 eclipse 时,必须注意两点
1)、新建的工程必须是 java project,不能是 android project,否则会破坏 android 源码(一般是多添 加文件/文件夹)
2)、导入前最好检查.classpath 里的文件在 android 源码中是否有相应的文件(文件夹),否则也会破坏 android 源码(一般是多添加文件/文件夹)
总的来说: 1、用 eclipse 来编辑代码、检查错误
2、不在 eclipse 上编译、运行 android 源码程序,只能在命令行通过 make(或 mm 或 mmm)编译 android 源 码
3、可以在 eclipse 上调试 android 源码程序(原理:eclipse 通过 ddms 服务器在 emulator 上进行调试), 并可以单步调试、断点调试。
下面,从官方文档总结出具体怎样用 eclipse 来开发 android 源码
1、建立基本的 android 开发环境 请参考官方文档或<android 模拟器在 ubuntu8.10 的安装> 2、编译 android 源码 android 源码根目录下通过 make 进行编译,请注意一些配置,具体可参考<android 源码的编译>
3、把 eclipse 工程配置文件复制到 android 源码根目录下 cp development/ide/eclipse/.classpath ./ chmod u+w .classpath # Make the writable
4、修改 eclipse 程序的配置 1)、修改 eclipse 缓存设置 把 eclipse.ini(在 eclipse 软件的安装目录下)的 3 个值改为下面的值: -Xms128m -Xmx512m -XX:MaxPermSize=256m 2)、把 android-formatting.xml 和 android.importorder 导入 eclipse android-formatting.xml、.classpath 和 android.importorder 都放在 development/ide/eclipse/下 android-formatting.xml 用来配置 eclipse 编辑器的代码风格;android.importorder 用来配置 eclipse 的 import 的顺序和结构。 在 window->preferences->java->Code style->Formatter 中导入 android-formatting.xml 在 window->preferences->java->Code style->Organize Imports 中导入 android.importorder 3)、安装 anyedit 插件(可选) 在 http://andrei.gmxhome.de/anyedit/下载并导入 eclipse 中
5、把 android 源码作为一个工程导入 eclipse 导入前先检查.classpath 里的文件在 android 源码中是否有相应的文件 (文件夹) 否则也会破坏 android , 源码(一般是多添加文件/文件夹),.classpath 里多余的路径可删除 新建 Java Project(不是 android project,否则会破坏 android 源码),选择从已存在的工程导入,工 程名任意,完成。 导入时,eclipse 要 build 工程,比较慢。导完后,一般都没有错误。
6、eclipse 上调试 android 里的程序。 先执行: cd android 源码目录 . build/envsetup.sh lunch 1 emulator & ddms & # to build the emulator # you should see a GUI picture of a phone # you should get a splufty debugging console 然后在 eclipse 中配置调试类型和端口: 在 Run->Debug Configurations->Remote java application 上双击,然后,”Host:”设为 localhost,” Port:”设为 8700,”Connection Type”为 Standard(Socket Attach) 然后“Apply” 注意,在点击”Debug”时苦出错,说 8700 端口被占用,那么把 DDMS 程序关掉,重新打开 DDMS 就 OK 了。 如果提供连不到 VM 错误时,请注意,要先在 DDMS 中选中某一进程(对应某一应用程序),才能在 eclipse 执行 Debug。 在 eclipse 调试时,可以设断点、单步调试。估计 google 团队也是这样开发、调试 android 应用程序的
7、编译 android 源码 执行: cd android 源码目录 . build/envsetup.sh 那么就会多出 mm/mmm 等命令, mm/mmm 用来编译模块 (包括 C、 C++、 JAVA 程序)我们也可以直接在 android 。 源码根目录下执行“make 模块名”来编译模块。 Android 源码中添加 修改应用 Posted on 2010-08-19 13:37 zhangweia 阅读(1607) 评论(0) 编辑 收藏 第一部分:添加一个新的应用 1. 在和系统相同版本的 SDK 目录下开发自己的 android 应用 2. 把开发的 android 工程放到源码的 packages/apps/目录下 3. 在工程目录下添加 Android.mk 文件,修改 LOCAL_PACKAGE_NAME :=test001 把工程名指定为 自己的工程名,我加载的工程为 test001 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := user LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_STATIC_JAVA_LIBRARIES := googlelogin-client LOCAL_PACKAGE_NAME :=test001 LOCAL_CERTIFICATE := shared include $(BUILD_PACKAGE) # Use the folloing include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH)) 4. 回到源码目录,然后执行 . build/envsetup.sh 注意 sh 后面有个空格 5. 执行 mmm packages/apps/test001 编译 test001.apk 包 6. 执行 make snod,编译 system.img 包 7. 执行 emulator &就可以在应用程序下看到自己编译的工程了 第二部分:修改原有的 Android 应用 1. 首先新建一个 android 工程,加载自己的 java 文件和资源文件 2. 在自己的 android 工程初步调试成功以后,把该工程的 java 文件,资源文件拷贝到联系人对应的 java 文件和资源文件目录 3. 然后在 linux 下执行以下命令,编译人联系人模块,把资源文件编译到联系人目录中 . build/envsetup.sh mmm packages/apps/Contacts 4. 刷新 android 源码工程,这个时候你就可以在 Contacts 包目录下看到你新加的资源文件和源文件了, 并可以在源码工程下修改代码并直接调试了 5. ?? 为什么不在 android 源码工程下直接添加源文件和 xml 资源文件了???? 答: 因为我们的 android 源码工程师以 java 工程导入的, 如果添加 android 的 xml 文件的话, java 程序无法识别资源 R 文件,所以我们必须先把需要的 xml 资源文件先在 linux 下编译 6. 在源码工程修改后,则可在 linux 下再次执行联系人编译命令,并 make snod 加载 system.img 文件, 并启动模拟器(emulator &),就可以看到你的修改了。 2011-04-19 修改 Android 源码的 Launcher 的例子 博客分类: ? Android AndroidOSUI 框架 Android 的 Launcher 研究:客制化桌面 UI 前言 能取得 Android OS 原始码,并修改里头的内容,有时候也颇有乐趣。最近和几位朋友聊到 “Android 框架的改造”,以及如何吸引对 Android 框架技术有兴趣的同好 一起交流的议 题;我个人认为,一开始如果能丢出一个比较有乐趣的议题,或许可以有抛砖引玉的效果。 上周在北京进行 Android 培训课程时,与 eoeAndroid 社群也进行了想法的交流,由于大家 都体认到 Android 底层技术的重要性及其价 值, 而且 eoeAndroid 社群里也有许多技术好手, 所以就和 eoeAndroid 的创办人靳岩兄有了一个共同主持研究 Android 底层技术 “同好小 组” 的想法,希望能透过社群的方式,集合大家的智慧,一起把底层技术研究清楚。 因为要让大家能有焦点,所以“发题”很重要,这个工作就由落在我身上了。由于第一次希 望题目能简单,并且有趣一点,至少要能达到发球的效果,吸引大家开始关心 Android 底层 技术,所以原则是:希望能用最简单的方式、让大家体验修改底层的乐趣。 题目说明: Launcher 第一次的题目是“Launcher”的修改。 Launcher 就是 Android 的应用程式启动器,Launcher 的功能还包含:桌面的切换、应用程 式快捷(shortcut)功能、背景图(Wallpaper)功能等等。因此,修改 Launcher 可以改变一些 很深层的 UI 功能。 在 Android 的桌面最下方, 有一个图示, 按下后可以拉出应用程式图示清单, 这是 Launcher 提供的功能。这一次,因为我们觉得这个 Launcher 的图示太制式化了,越看越不好看,所 以想要修改一下,换张图,要怎么做到呢? 范例展示 例如,图 1 是原始的图示;图 2 是修改后的图示。 图 1: 原始图示 图 2: 帮 Launcher 妆扮一下 实作说明 1/4: 取得 Android 原始码与 EeePC 移植 这个功能并不难做,事实上,完全不用写程式。只要把图档重做就可以了。只不过前提是, 要知道: 1. 如何取得 Android OS 原始程式码 2. 如何编译 Android OS 最简单的做法是: 1. 下载 Android 原始码后、取得 EeePC 的移植(proct) 2. 编译“TARGET_PRODUCT”为 eee_701 3. 由于 Launcher 都是用 Java 语法写成的, 所以不会有架构(ARM/x86/...)的问题, 编译后 可以取得 Launcher.apk;APK 套件是不分处理器平台的 先学会如何由 Android 原始码编译出 eee_701 的 image,才有办法继续进行 实作说明 2/4: 修改图档 在 Android 原始码的 packages/apps/ 目录里,存放了 Android 内建的应用程式原始码, Launcher 是 Android 的一个应用程式,所以从这里找到它的原始码,并进行修改工程。 切换到以下目录: <android source>/packages/apps/Launcher/ 接着要修改 src/目录下的内容,还是 res/目录下的内容呢?图档属于 Android 的 “resource”,因此当然是到 res/目录下找到我们要的图档。 切换到以下目录: <android source>/packages/apps/Launcher/res/ 又看到了一大堆目录,图档的部份存放于: ? ? drawable-land/ - landscope 模式的图档 drawable-port/ - portrait 模式的图档 我们先改一下 portrait 模式的图档。 找到 drawable-port/tray_handle_normal.png 档案如 下: 就是它了,换掉,把图档换成这个: 换好后重编 Android 即可。一行程式都不用改。 实作说明 3/4: 安装 Launcher.apk 重编 Android 原始码,接着可以在 out/target/proct/<proct name>/system/app/找到 Launcher.apk 套件。把 Launcher.apk 安装到 AVD(Android 模拟器)里做测试,方法如下: 1. 先启动一个 AVD 2. 执行 adb 将 Launcher.apk 手动安装到 AVD 里,指令如下: $ adb install -r <your-path>/Launcher.apk
3. Android源码编译是干什么
编译Android系统。
4. 自己可以编译安卓源码吗
用最新的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源码的多仓库管理机制.下面,不妨自己动手尝试一下.
5. 安卓app源码我有,怎么编译成app,编译之前我能不能修改呢
用android studio配置java的ellipse,可以修改
6. android 导进来的工程修改源码后怎么编译
1、Android的文件系统结构是怎样的,我们安装的程序放在那里?
编译Android源码之后,在out/target/proct/generic一些文件:
ramdisk.img、system.img、userdata.img、 system、 data、root
其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。
ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。
2、Android SDK和android源码能为我们提供什么工具?
AndroidSDK提供有很多工具,如adb,ddms,emulator,aapt等,并提供kernel-qemu、ramdisk.img、system.img、userdata.img。因此,只要有android SDK,我们就可以在模拟器上把android跑起来。
Android源码可以编译出android SDK、adb等工具、android文件系统,以及ADT插件,也就是说,我们可以从android源码编译出所有android相关的东西。
3、 把Android源 码”make”之后会生成许多工具和android文件系统(system.img等),我们又可以使用“makesdk”来生成android SDK,android
SDK也包括有工具和android文件系统(system.img等),而原来安装的时候我们也安装了androidSDK,那么我们在开发时应该使用那些工具和android文件系统呢?
7. 如何在Android源码下编译自己的项目
在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈Android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解).
本文适用于Ubuntu 16.04上编译Android 6.0.*,其他情况请酌情处理,自行参考官网吧.
请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
sudo apt-get install git
git config –global user.email “[email protected]”
git config –global user.name “test”
8. 用gcc/g++如何编译android工程中的.c/.cpp程序,如何查看android工程师.c/.cpp文件需要的依赖及如何解决
目前暂不支持开发工具编译C、c++代码生成so文件,应该后续版本会有的。.so 为共享库,是shared object,用于动态连接的,和dll差不多,可以这样调用so文件:得到/usr/java/jdk1.5.0_13/jre/lib/i386,将SO文件放在该目录下运行java程序,输出了由C语言函数计算出的结果以引擎自带的HelloCpp为例配置C++的的自动编译。在eclipse中导入hellocpp工程。操作路径:eclipse--file--import工程导入后,右击工程--properties取消CDT builder。然后点击New新建一个我们自己的builder,选择program。指定ndk-build.cmd来编译我们的项目,下面的工作路径将作为参数传入给ndk-build.cmd添加NDK_MODULE_PATH变量,注意要写两个路径[cocos2d-x安装目录和其目录下\cocos2dx\platform\third_party\android\prebuilt],用分号分开最后点OK保存。因为不是执行build_native.sh编译本地代码,所以别忘了手动拷贝下hellocpp工程下resource中的资源到android工程assets.可以在命令行下编译多个C/CPP文件,通过cl -c命令来编译类文件,编译成obj文件后,你可以使用lib命令将其编译为lib文件,然后使用link命令连接多个obj文件。默认生成的可执行文件的名称是命令中第一个obj文件的名称,具体参考代码如下:
9. 如何单独编译安卓系统源码指定模块
Android源码目录下的build/envsetup.sh文件,描述编译的命令
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
要想使用这些命令,首先需要在android源码根目录执行. build/envsetup.sh 脚本设置环境
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件
下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:
1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/
编译完后 运行 make snod
会重新将你改过的模块打入到system.img中