android源码教程
1. Android源码该如何学习
直接没目的的学习Android源码效果并不好,建议设计一系列的任务,带着任务学习源码。比如:
1. 编译并且烧录到开发板中去
2. 尝试分析、统计和优化系统的启动速度
3. 在源码中添加新的APP,或者尝试删除系统出厂的APP
4. 在源码层编写一些应用,如自定义锁屏、底层Camera应用或者Audio应用
5. 尝试编写一个HAL层驱动
6. 尝试移植系统到其他开发板上去
2. Android绘制源码分析(下)
Android绘制源码分析上 介绍了这个屏幕的架构,以及相关的系统类 Android绘制源码分析中 介绍了整个绘制的启动,绘制过程 ,绘制 完毕的一个流程,这篇的终点就是介绍我们平常自定的三步骤
如何确定大小?肯定就需要测量,从根 View 递归调用每一级子 View 的 measure() 方法,对它们进行测量。
所以测量是指父View对子View测量,父View收到子View宽高参数,然后结合自身的宽高,一起商量测量出给宽高传递给子View
host 就是DecorView,host.layout确定自身的位置
setFrame(l, t, r, b)这个方法用于确认View四个点的位置,及初始化left,top,right,bottom的位置,这是ViewGroup布局完成
以上就是确定View位置的大概方法和流程
ViewRootlmpl->boolean canUseAsync = draw(fullRedrawNeeded);
ViewRootlmpl->drawSoftware()
canvas 是由图表Surface 赋值传值给 mView.draw(canvas);
View->draw()
最后由子类在onDraw()自定义绘制
1.单独一个子控件,我的目的就是绘制,所以重点就是draw里面的逻辑,不需要去管layout,或者measure
2.自定义时,里面包含多个控件,这时需要去测量 (measure),布局(layout),绘制(draw)
3.自定义时明确功能,可能只是需要在TextView中加一个功能,所以可以直接继承TextView
3.自定义时可能是父布局里,如RelativeLayout,只是需要改变某个需求,可以直接继承RelativeLayout
4.自定义组合控件,某个布局块的一部分控件采用父控件统一管理
3. 如何用Android 源码生成APK签名文件
我们很多应用需要用到系统签名,可以通过生成系统签名文件,在生成apk时使用这个签名,然后可以安装到机器中,不需要放在源码里编译,重新刷系统。
先附上 50和 20机器人通用的debugkey(图已经省略)
在linux环境中,以Android源码目录为根目录。
其中的platform.pk8是制作系统签名需要的文件。
1、在这个目录下,执行
生成临时文件platform.pem
2、接着执行以下命令,将在目录下生成platform.p12文件,它本质上应该就是一个数字证书
3、然后再执行以下命令出现以下信息,表示成功生成platform.jks
这个名字可以改成debug.keystore. 它的后缀本身是没有关系,eclipse和AS都识别 platform.jks
4、然后在打包 apk 的时候选择platform.jks文件,就可以直接用adb命令安装apk到机器中了。
xxxx表示需要安装的apk路径
5、签名的 Key store password和Key password都是android
4. 怎样着手研究 Android 源代码
一、源码里的工程需要导入所有的Android源码,不可以单独作为一个Android工程导入到Eclipse里。
二、使用git和repo下载Android的源代码,参考如下步骤
以下操作都是在Ubuntu10.04LTS下完成:
1)安装git
sudo apt-get install git-core
2)安装curl
sudo apt-get install git-core curl
3)安装Repo,为了方便直接下载repo到用户根目录中。通过curl下载repo
curl http://android.git.kernel.org/repo >~/repo
4)给repo可执行的权限
chmod a+x ~/repo
5)新建一个目录,然后进入该目录。通过repo将当前Android上所有源代码下载。
首先初始化本地,
~/repo init -u git://android.git.kernel.org/platform/manifest.git
看到repo initialized in /android的提示后,则证明初始化完毕。成功后会在~/android下生成.repo文件夹
执行
repo sync
则自动开始下载源代码。git支持断点续传,如果中断了下次可继续。
单独下载内核,用这个
git clone git://android.git.kernel.org/kernel/linux-2.6.git
如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:
repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
另一种情况是,我们只需要某一个project的代码,比如kernel/common,就不需要repo了,直接用Git即可。
git clone git://android.git.kernel.org/kernel/common.git
5. 谁有好的安卓开发教程推荐
android教程网络网盘免费资源在线学习
链接: https://pan..com/s/1vEeYVMBFhxsmmlxkEoHW1w
android教程
千锋教育Mars老师Android游戏开发教程-数独-源码下载(1)
千锋教育Mars老师Android游戏开发教程-数独-源码下载
千锋Android游戏开发视频教程-游戏数独-Mars力作(1)
千锋Android游戏开发视频教程-游戏数独-Mars力作
千锋Android应用开发培训视频教程-老罗在线课堂
千锋Android应用开发培训视频教程-老罗典藏版
千锋Android培训-java视频教程-Mars典藏版
Android游戏开发基础视频教程-cocos2dMars版
千锋3G学院_Android游戏开发教程_数独_08.mp4
千锋3G学院_Android游戏开发教程_数独_07.mp4
千锋3G学院_Android游戏开发教程_数独_06.mp4
千锋3G学院_Android游戏开发教程_数独_05.mp4
千锋3G学院_Android游戏开发教程_数独_04.mp4
千锋3G学院_Android游戏开发教程_数独_03.mp4
6. 如何使用Android Studio开发/调试Android源码
一、修改Android
Studio(以下简称AS)的内存配置
因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms和-Xmx的值。文档中使用的是748m,
可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一个没有classpath的JDK,
这样可以确保使用源码里的库文件
三、生成导入AS所需配置文件(*.ipr)
①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)
②检查out/host/linux-x86/framework/目录下是否有idegen.jar
如果idegen.jar不存在,执行:
mmm
development/tools/idegen/
在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。
我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。
③执行
development/tools/idegen/idegen.sh
等待出现类似下面的结果:
Read
excludes:
5ms
Traversed
tree:
44078ms
这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ
IDEA(AS是基于IntelliJ
IDEA社区版开发的)的配置文件
④在AS中打开源码根目录下新生成的android.ipr
四、解决源码中跳转错误问题
①为当前工程设置正确的SDK和JDK
②设置'Moles'的依赖
先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
点击上图中'2'指向的'+'并选择上图'3'指向的'Jars
or
directories'选项,依次将frameworks和external文件夹添加进来
五、DEBUG源码
可以通过给刚导入的工程在'Moles'中添加'Android
Framework'来让AS将它作为一个Android工程,从而方便调试代码.
在弹出的选择进程(Choose
Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.
六、其它
代码中很多地方提示Call
requires
API
Level
x....
出现这个问题是因为AS将工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.
只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。
也可以考虑使用build.gradle来解决该问题。
7. 如何获取android源代码
当前的Android代码托管在两个方:https://github.com/android 和https://android.googlesource.com之前在 android.git.kernel.org上也有托管,不过现在重定向到了https://android.googlesource.com好在都支持git访问。
google提供的repo工具实际上是一个内部操作git工具来简化操作Android源码的Python脚本。经过尝试,直接使用git工具在ubuntu下可以实现cloneAndroid源码。下面介绍一下方法:
1.获取当前的在github上托管的Androidgitrepositories:
github页面为:https://github.com/android/following。不过这个页面不支持通过wget"https://github.com/android/following"或者curl"https://github.com/android/following"的方式访问,错误信息如下:
这个时候需能做的只能是"tryagain"了。
需要说明的是"不要试图同时并发执行多个gitclone命令",这样会导致大量出现上面贴图中的错误,另外,整个clone过程中耗时最多的gitrepository如下:
kernel_common.gitkernel_msm.gitplatform_frameworks_base.gitplatform_prebuilt.git其中platform_prebuilt.git是google提供的预编译好的二进制文件,包含:各种库文件,jar包,可执行程序等等,如果只是阅读Android源代码,这个gitrepository可以不用clone.
8. 怎样运行Android源代码
小编初学android的时候也不知道如何导入源码,但经过半天的琢磨··终于找到了一个好的捷径。 第一步在Eclipse 开发环境中,选择File---》import
第二步选中所要导入的文件
第三步 选中导入的项目,右键选择Properties--》
第四步 选择“Android”选项,勾选TargName,然后单击OK。小提示:TagName要与你当前模拟器的版本匹配,比如笔者的是android 2.3.3。
第五步 在导入的项目按鼠标右键 ,单击Android tool ---》Fix Project Properties
这样子··你下载的源码就可以运行了,虽然步骤烦琐了一点,但是操作多了就了就顺手了。 不过··大家有什么更便捷的方法也可以推荐给我。
9. 如何使用Android Studio开发/调试Android源码
开发调试环境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码
由于AS是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA
一、修改Android Studio(以下简称AS)的内存配置
因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是748m,可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一个没有classpath的JDK,这样可以确保使用源码里的库文件
在代码中加断点,然后选择'Run'->''或者直接点击下图所示的图标
在弹出的选择进程(Choose Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.
六、其它
代码中很多地方提示CallrequiresAPILevelx.... 出现这个问题是因为AS将我们的工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.
我们只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。
也可以考虑使用build.gradle来解决该问题。