ButterKnife是一个专注于Android系统的View注入框架,有了ButterKnife可以很轻松的省去findViewById,ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的 class,对运行时性能没有影响,本篇我们来详细学习一下它的源码。 view.setTag(holder); } holder.name.setText("Donkor"); holder.job.setText("Android 指定多个id绑定事件: public class MainActivity extends AppCompatActivity { //Tip:当涉及绑定多个id事件时,我们可以使用Android 如果有标记@OnClick注解,则对view进行点击事件设置 到这里,ButterKnife的源码分析流程基本结束,如有不对的地方,可以指出校正。
Zygote进程源码分析 由app_process运行ZygoteInit class zygote由java编写而成,不能直接由init进程启动运行。 ), REG_JNI(register_android_util_EventLog), REG_JNI(register_android_util_Log), ...... }; 大致概括为如下几点: 绑定套接字,用来接收新Android应用程序运行请求 预加载Android Application Framework 使用的类与资源 启动并运行SystemServer 处理新Android = null) { caller.run(); } } ①: 绑定套接字,用来接收运行Android应用运行请求 frameworks/base/core/java/com/android 应用程序运行请求 预加载Android资源,提高应用进程启动速度 启动并运行SystemServer(运行AMS、PMS等核心服务) 处理新Android应用程序运行请求
由于一些原因迫使最近开始需要研究一下Launcher3源码,为了不再像以前那么傻逼(研究Settings等代码没作笔记),故这里赶紧将阶段性的感悟整理成文章,方便日后回看。 在开始学习Launcher3源码之前请务必保证你已经具备如下图所示基础知识技能(相关权重系数已经饼状图标注),如下: ? 必备基础知识技能 看懂Launcher3源码必须要先准备充足上面的知识点,每个知识点在Launcher3源码中的占比数已经通过饼状图给出。 下图其实就是Android系统开机启动Launcher的大致过程,如下: ? 有了上面这些图,相信你再打开Android M Launcher3源码进行阅读时就能有个大致框架了,代码也就不贴了,只为记录而已。
下载源码 使用repo从源码仓库下载Source 从百度网盘下载别人下载好的Android5.0 编译源码 1. 进入Android 源码根目录 2. 生成成功后,会显示这个jar包的位置,并显示 #### make completed successfully (20 seconds)#### mmm development/tools/idegen/ 3. 执行 #这行命令的意思是生成对应的文件:android.iws, android.ipr, android.iml . sh . /development/tools/idegen/idegen.sh 导入到Android Studio 打开Android Studio,点击File>Open,选择刚刚生成的android.ipr
文章目录 LayoutParams源码分析 概述 LayoutParams基本用法 LayoutParams源码分析 LayoutParams源码分析 概述 LayoutParams是布局参数的意思,我们在 LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); linearLayout.addView(textView2); TextView textView3 = new TextView(this); textView3.setText("TextView3"); textView3.setLayoutParams(new LinearLayout.LayoutParams (100, 100)); linearLayout.addView(textView3); LayoutParams源码分析 ViewGroup.LayoutParams public LayoutParams R.styleable.ViewGroup_MarginLayout_layout_width, R.styleable.ViewGroup_MarginLayout_layout_height); int margin = a.getDimensionPixelSize( com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_margin
关键对象: 1、LiveData: 作为数据入口,维护观察者和被观察者的关系 2、Observer:数据改变后最终触发的函数,回调接口,调用端实现 3、LifecycleOwner: Activity // 最终调用观察者的onChanged()回调 observer.mObserver.onChanged((T) mData); //最后到这里 } 3、 sync(); //源码前面有 } mAddingObserverCounter--; } 4、LiveData数据设置 LiveData有两种方式设置数据 mVersion++; mData = value; dispatchingValue(null); //前面已经有了dispatchingValue的源码
AOSP (Android Open Source Project) 参考文档:https://source.android.google.cn/setup/downloading 源码地址 安装 Repo WORKING_DIRECTORY cd WORKING_DIRECTORY 2.运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容 repo init -u https://android.googlesource.com 要查看分支列表,请参阅源代码标记和版本 repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1 显示隐藏文件 ) 3.开始下载 repo sync 4.之后是漫长的下载时间,预计几个小时(我下了一个下午)。 如果有镜像地址可以下载的话,可以大大缩减下载时间
已经有一个多月没有看Android的知识了,之前在杭州时就买了邓凡平的《深入理解Android卷I 》一直没来得及研究。 趁现在有时间来研究下Android的源码。之前没有接触过Linux系统,我的本本现在用的是Windows系统,已经用习惯了。 接下来说重点,Ubuntu上下载Android源码。 特别提醒:Android下载,编译时要确保系统的内存在1.2GM以上,且有足够的硬盘可用空间,否则会编译失败终止。 现在整个源码下载完大概在15G左右,在加上编译的,所以安装虚拟机时硬盘空间最好在35G-45G(个人建议),我就吃了这的亏,没仔细看说明,就下载,下暴了Ubuntu虚拟硬盘,系统都进不去。 ,保存到~/bin/repo文件中 chmod a+x ~/bin/repo 给~/bin/repo赋给repo执行权限 3、初始化repo 首先建立一个目录用来存放Android源代码
下载最新Android系统源码,可以在国内的清华大学Android源码镜像下载,速度也是挺快的。我晚上几个小时就下载下来了。 AOSP 工程目录 # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录 repo sync # 正常同步一遍即可得到完整目录(因为已经下载了大部分,更新很快) 这样,就得到了最新的android 镜像源码,我获取到的为:7.0的android源码。 可以通过查看:build/core/version_defaults.mk查看当前的android系统的版本号
端FFmpeg +SDL2的简单播放器 SDL2 Android端的简要分析 Android 部分源码分析 暂时只包括视频系统的部分。 3. SDL循环渲染数据 SDL_UpdateTexture(): 设置纹理的数据。 SDL_RenderCopy(): 纹理复制给渲染器。 SDL_RenderPresent(): 显示。 Android_Available Android_Available方法总是返回1,表示可用。因为只有编译在Android平台时,才会去初始化这个Android_bootstrap。 SDL_EGL_CreateSurface(_THIS, NativeWindowType nw) { /* max 2 values plus terminator. */ EGLint attribs[3] 不同的是,如果是yuv就会创建3个纹理 。
一.如何调试Android Gradle源码 最简单的方式如下: 1.配置 gradle.properties 比较方便的做法是配置全局的 gradle.properties,这样对所有 Gradle /gradlew --daemon # 启动 daemon 进程 3.Attach daemon 进程 然后,选择 Gradle Daemon 进程,如下图所示: 4.新建一个空的 :gradle:3.5.0' } 这样就引入了源码,想看对应版本的源码,改变相应的引用即可 保持和classpath声明的一致 classpath 'com.android.tools.build: /gradlew assembleDebug 二.Gralde Plugin源码分析 平时我们使用plugin都是通过apply方法,例如: apply plugin: 'com.android.application basePluginApply(project); pluginSpecificApply(project); }); } 3.
在上篇文章中我们学习了setContentView的源码,还记得其中的LayoutInflater吗?本篇文章就来学习下LayoutInflater。 resId) { ensureSubDecor(); ViewGroup contentParent = (ViewGroup) mSubDecor.findViewById(android.R.id.content 备注:以下源码中有七条备注。 属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效; 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true; 3、 则说明是系统控件,会在接下来的调用链在name前面加上 'android.view.'
Android系统启动 其实Android系统的启动最主要的内容无非是init、Zygote、SystemServer这三个进程的启动,他们一起构成的铁三角是Android系统的基础。 init进程的源码在system/core/init/init.cpp`下。 com.android.launcher3.Launcher",点击查看Launcher的AndroidManifest.xml。 启动架构示意图 我们都知道Android系统架构是Linux Kernel、Android Runtime、Liberaries、Application Framework和Application这五个部分组成的 ,如下图所示: 那么Android系统在启动过程中,都经历了哪些架构组成部分呢?
说在前面 本次推出 Android Architecture Components 系列文章,目前写好了四篇,主要是关于 lifecycle,livedata 的使用和源码分析,其余的 Navigation Android lifecycle 使用详解 Android LiveData 使用详解 Android lifecyle 源码解剖 Android livedata 源码解剖 github sample 地址: ArchiteComponentsSample Android 技术人,一位不羁的码农。 题外话 Android Architecture Components 已经写了四篇文章了,其余的 Navigation, Paging library,Room,WorkMannager 等春节结束之后再更新了
: The Big Nert Ranch Guide》 《疯狂 Java 讲义》 《疯狂 Android 讲义》 《Android 软件安全与逆向分析》 《深入理解 Java 虚拟机》 《Android 业务相关的知识可以在工作时间来积累,业余的时间里,多 Read The F*cking Source Code,从优秀的源码和设计里汲取营养。 所以,最近计划开始写一系列 Android 源码分析的文章,包括 Android 系统源码及一些优秀的第三方类库等等。 目前的计划是按照我最近一段时间更新公众号的频率,大约十天更新一篇,阅读源码主要使用的工具和方式是: GitHub 上的 android/platform_frameworks_base 等源码配合 Chrome 插件 insight.io 自己电脑上搭建的 OpenGrok 浏览 Android 7.1.2 源码 http://androidxref.com/7.1.1_r6/ 大致思路就是这样,实践一阵试试
bsd的源码) | |-- i386 (i386架构) | |-- i387 (i387架构?) | |-- ia64 (ia64架构) | |-- include (头文件) | |-- man (数学函数,后缀名为.3,一些为 ) |-- libstdc++ (libstdc++ C++实现库) | |-- include (头文件) | `-- src (源码 showslab (showslab工具) | |-- sound (声音相关) | |-- su (su命令源码 源代码简要分析 Android 源码结构分析PDF下载
说在前面 本次推出 Android Architecture Components 系列文章,目前写好了四篇,主要是关于 lifecycle,livedata 的使用和源码分析,其余的 Navigation <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.arch.lifecycle.extensions " > <uses-sdk android:minSdkVersion="14" /> <application> <provider android }.lifecycle-trojan" android:exported="false" android:multiprocess="true" /> 下一篇:Android livedata 源码解剖
Android开发的同学们对setContentView肯定都不陌生,但凡写到Activity,都离不开这个函数,今天我们就来看看它内部的实现吧! 备注:本文基于Android 8.1.0版本。 * *
You can add an {@link android.support.v7.app.ActionBar} to your activity when running on API * *
For information about how contentParent.removeAllViews(); contentParent.addView(v); mOriginalWindowCallback.onContentChanged(); } 3、 createSubDecor setContentView的第一步就是确保SubDecor被install,下面源码中有注释 // 此处可以看出SubDecor是一个ViewGroup
android系统是开源的,所以谷歌官方在每发布一个版本的时候都会放出它对应的API源码的,让我们可以深入了解android的API实现过程,这就是开源的魅力。 API 源码 1.首先要先下载SDK下的对应版本API的源码Source for Android SDK ? 二:查看对应的support拓展包的源码 下面以android-support-v4.jar为例子 1.先要下载SDK下的android support library,这个里面包含了最新版本的拓展包 我的是support v4的架包源码路径为C:\Users\Administrator\android-sdks\extras\\android\support\v4\src 之后打开你所创建的这个文件 通过源码去深入学习API的实现过程,可以让我们对android有更深入的体会和了解。
//观察 LiveData viewModel.state.observe(this, Observer { //更新 UI }) LiveData 实现原理分析 LiveData 源码中主要用到的类 参考 Android Developers