精华内容
下载资源
问答
  • Android代码目录结构
    2021-06-02 22:22:58

    在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置。

    Android源代码顶层目录结构如下所示:

    ../CyanogenMod/

    ├──abi #应用二进制接口,不同的操作系统,应用二进制接口不同,因此linux上的二进制可执行文件在windows上无法执行

    ├──android #存放了一些xml文件,用于描述工程路径及其对应的远程仓库地址,repo工具将使用这些信息同步代码

    ├──bionic #bionic C库,Android没有使用标准的glibc库,而是自己重新实现了一套c/C++库,包括libc libdl libm libstdc++ libthread_db

    ├──bootable # 包含两个工程,recovery和diskinstaller,刷机或者系统升级都是由recovery完成的,

    ├──build #Android编译系统核心代码都存放在该目录,我们也将对该目录下的文件做详细分析

    ├──cts #Android兼容性测试套件标准

    ├──dalvik #dalvik JAVA虚拟机,Android用的java虚拟机和pc上用的jvm不一样

    ├──development #应用程序开发工具 有eclipse开发用的formatter配置

    ├──device #设备相关配置文件,存放规则 device/$vendor/$product

    ├──docs #网站文档

    ├──external #用到的第三方库 象busybox bash openssl等工具都存放在该目录

    ├──filelist #使用godir命令生成的索引文件

    ├──frameworks #核心框架——java及C++语言,可生成framework.jar

    ├──gdk #glass开发Sdk

    ├──hardware #部分厂家开源的硬件适配层HAL代码

    ├──kernel #内核源码目录 存放规则kernel/$vendor/$product

    ├──libcore #一些有用的库 像xml Jason luni

    ├──libnativehelper #Support functions for Android's class libraries

    ├──Makefile #在顶层目录编译,利用的默认Makefile,它只是简单包含了build/core/main.mk

    ├──ndk #ndk开发工具

    ├──packages #Android apk程序所在目录,象settings,gallery等程序

    ├──pdk #Platform Development Kit The goal of the PDK release is to help chipset vendors and OEMs to migrate to a new relelase

    ├──prebuilt #x86和arm架构下预编译的一些资源

    ├──prebuilts #有clang eclipse gcc misc ndk qemu-kernel sdk tools等子目录,交叉编译工具链所在目录

    ├──sdk #sdk及模拟器

    ├──system #核心代码,包含了最小化可启动的环境,还有底层调试及检查工具,adbd也在system/core目录

    ├──tools #有子目录build和motodev,可能跟摩托罗拉有关

    ├──vendor #设备制造商专用的配置存放目录,存放规则vendor/$vendor/$product,cm编写的apk也放在该目录

    build子目录存放编译系统的核心代码,包含着138个makefile,15个shell脚本,19个python脚本,7个C文件,7个C++文件,16个头文件,因此如果想分析编译系统核心代码,使用的IDE需支持这些编程语言,推荐使用eclipse,安装一些插件就可以很方便地查看这些代码

    build子文件夹的目录结构如下所示:

    build/

    ├── buildspec.mk.default #buildspec的模版文件,可定义一些变量比如TARGET_BUILD_VARIANT:=user,TARGET_BUILD_TYPE:=release

    ├── CleanSpec.mk #增量编译时,会执行该文件里的命令,这些命令一般用于清除中间文件

    ├── core #编译系统的核心文件放在该目录,主要是一些makefile

    ├── envsetup.sh #编译时需先用source envsetup.sh设置好环境变量,该脚本提供了许多有用的命令,比如cout,croot,cgrep,在详细介绍Android编译步骤时会列出来

    ├── libs #是一个C++模块,编译后可生成libhost.a静态库,里面的函数主要用于与编译主机交互

    ├── target #包含编译目标相关的makefile,它有两个子文件夹 board和product,产品都在该目录下定义,比如generic,full产品,定义设备产品时,会从这里继承产品

    └── tools #各种工具,多数使用python编写,工具有用于签名的signpak, 用于下载device配置的roomservice.py等,后续将详细介绍

    我们在阅读build核心代码时,可能最头疼的就是变量,编译系统里有成百上千的变量,我们常常不知道其含义,容易一头雾水,为此我做了一个编译系统的参考手册供大家查阅,

    可以很方便地检索变量,查看变量的意义,并有示例值。链接:android.cloudchou.com

    bc5b8297554b14bea76eeb84ae073c92.png

    感谢您的支持,我会继续努力的!

    赏个5毛,支持我把

    9d6e3ddd5e7d26e15a1f2522420b4054.png

    da49380bc3f42e4d899927cf0b2a4cfe.png

    打开支付宝扫一扫,即可进行扫码打赏哦

    更多相关内容
  • Android核心代码

    2012-03-07 22:56:30
    Android核心代码,大量的丰富的Android实例
  • 安卓代码核心结构

    千次阅读 2017-07-29 14:21:17
    安卓体系结构图如下 第一层是我们的APP层,在这个层次中有我们熟悉的应用程序,也是我安卓系统自带的一些应用程序,比如说我们的通讯录,比如说我们的电话本,比如说我们短信,这都是我们系统自带的一些运用程序,...

    安卓体系结构图如下


    第一层是我们的APP层,在这个层次中有我们熟悉的应用程序,也是我安卓系统自带的一些应用程序,比如说我们的通讯录,比如说我们的电话本,比如说我们短信,这都是我们系统自带的一些运用程序,但是除此之外还可以自己开发一些运用程序放到这个层次当中。


    第二层是我们框架层,在这个层次中包括了10最主要的部分。包括我们的活动管理层,窗口管理器,内容提供者,试图子系统,通知管理器,包管理器,电话管理器,资源管理器,位置管理器,XMPP服务。这10个最重要的组成部分共同为我们的API提供相应的管理机制

    第三层是系统库与运行时,从名字上看分为两个部分,左边是系统库,它里面有9个部分,包括我们媒体库和数据库。然后右边是我们安卓运行时,又由两个部分构成,第一个部分是我们的核心库,第二个部分使我们JAVA虚拟机。我们这里着重强掉这个JAVA虚拟机是干嘛的,我们JAVA是跨平台的语言,他编译出来的程序不需要重新编译就可以在其他平台上运行,我们之前学的嵌入式的知识告诉我们,不同的硬件平台他的程序对应的机器码是不一样的,但是JAVA编译出来的程序,是因为我们硬件平台与应用程序之间隔了一层JAVA虚拟机,实际上我们程序不是直接在CPU上运行的,是在JAVA虚拟机上运行的。JAVA虚拟机会把它转化为相应的平台代码在进行运行。

    第四次就是我们LINUX内核了。


    我们接下来看一看我们功能模块怎么和我们目录对应起来


    我们第一个是看下第一个目录


    他的名字叫做应用程序的二进制接口,属于一个轻量级的目录,我们不做详细的介绍


    这个目录是安卓5.0新引入的虚拟机。


    第三个目录是bionic这个目录,这个目录实际上是实现C库的,是C库的一个目录。


    第四个目录是bootable目录,从名字上来看知道,他应该是和我们启动相关的目录,他存放了bootloader可以使用的通用性代码,也包括一些系统恢复相关的代码


    第五个目录是build,一看就知道是和我们编译相关的代码

    在build目录下还存放一些编译的规则,还用到编译当中我们会用到的工具,比如说我们怎么把二进制文件转换为汇编代码的工具。

    下一个目录是

    这个里面主要存放的是一些测试案例,利用这些测试案例可以测试我们安卓系统的稳定性和兼容性


    这个目录是用来实现我们虚拟机 的


    这个目录我们平时很少用得着,这里不介绍,以后牛逼了来介绍一下



    这个development这个目录,这个目录非常重要,这里面都是存放这我们应用编程的案例

    进来看一下



    进入samples这个目录里面


    就有很多我们应用程序的案例,当你开发某个应用程序的时候,你可以来找一找有没有你相关的一些案例,你可以参考它来进行相应的开发。


    然后是device目录,device目录从名字上来看,他应该是和我们设备相关的,存放着和你设备密切相关的文件


    这个是document的缩写,一看就知道这是文档相关的目录。


    然后是external目录,external目录是引用的外部的第三方软件。比如说进入这个目录


    这有个bzip,这是一个压缩和解压缩的工具,比如说我们安卓系统要用到这个东西,就可以把这部分代码放到我们安卓的这个目录下面来,然后进行编译,那这个工具就被引入到我们安卓系统里面去了。

    然后是frameworks 从名字上就可以看出他是我们第二层,框架层的代码

    然后是我们hardware hardware目录是存放我们硬件抽象层,有的公司是把自己硬件抽象层的代码开源出来,如果开源出来了就把它放到这个目录里面来的


    然后就是libcore,看名字就可以看出来它是核心库,就是我们第三层的那个核心库,

    然后是这个库,也没什么用,等牛逼再来讨论


    下一个是NDK目录,ndk着重来讲一下

    我们在写安卓应用程序的时候,通常用的语言是JAVA语言,但是JAVA语言有一个很重要的特点,他是半解释性的语言,半解释型的语言很容易反汇编,这样就拿到了他全部的代码,这样他的安全性就存在隐患,怎么来解决这个问题呢,人们就想了一个办法,我们把程序分为两部分,一部分不重要的就用JAVA来写,另一部分重要的就用C或者C++来写,C/C++来写成一个动态库,比如说我们的.so,然后我们用JAVA写的APP,用JNI接口来调用,这是解决这个问题的办法,而我们用C和C++写的动态库就是NDK的开发。而我们这个目录就是为我们NDK开发提供相应的API和提供一些相应的帮助的目录。


    然后是我们packages目录,它里面是存放的一些运用程序


    然后是我们pdk。是为我们平台开发提供一些帮助的


    然后是我们prebuilt主要是提供工具链,

    然后是我们skd目录,里面会提供应用程序大量的api,还有就是相应的虚拟机,模拟器都在这个sdk里面

    然后是我们sysstem目录


    这个目录非常重要,它里面提供了我们文件系统最底层的文件,比如说我们应用程序的组件啊,一些系统库啊


    然后这个里面就两个小工具



    然后是我们vendor,这里面是我们厂家定制的内容,也不是很重要






    展开全文
  • 安卓Android源码——闹钟源代码.zip
  • 声明:我也是刚入坑半个月的小白,网上USB串口通信教程一写一大堆,看都看不懂,而且复制还不能运行,不是缺这个就是缺那个,所以我尽量减少导入其他包,核心代码仅10行代码完成一次Android USB串口通信,并且逐行...

    开发环境:安卓版 AIDE,windows版 Android studio
    APP适用范围:androuid 6.0以上
    调试设备:一部安卓手机,一个51单片机调试连接
    最终实现功能:一个USB串口调试助手,内置各种驱动,波特率,停止位,数据位…设置,显示转换。
    适看人群:小白
    声明:我也是刚入坑半个月的小白,网上USB串口通信教程一写一大堆,看都看不懂,而且复制还不能运行,不是缺这个就是缺那个,所以我尽量减少导入其他包,核心代码仅10行代码完成一次Android USB串口通信,并且逐行解释。这样方便移植,包会上传GitHub。

    功能展示

    10行代码能有什么效果?安卓手机向51单片机发送送“你好”,51单片机回显“你好”给手机,通过气泡显示出内容。这个在软件首次打开执行一次,所以插上单片机打开软件可以提示气泡“你好”。
    授权窗口
    首次插上51单片机会弹出的授权窗口,点击同意权限,也可把默认勾选,这样插上设备,就会打开软件。
    选择授权
    多个软件则会弹出这种授权选择窗口,一样选。

    软件界面

    同意权限软件自动运行,气泡显示51回显消息“你好”,这是软件界面,非常简洁,啥都没有。

    代码-AIDE

    1. 核心10行代码添加到MainActivity.java的onCreate方法里。
            try    //转码 需放在Try中运行,在异常时不至于软件死机
            {
                UsbManager  Usb管理 = (UsbManager) getSystemService(Context.USB_SERVICE);   //通过系统服务得到USB管理
                UsbDevice   Usb设备 = Usb管理. getDeviceList().values().iterator().next();   //通过USB管理获取设备列表,然后通过迭代器得到其中一个设备,由于只有一个51单片机
                UsbEndpoint 发送节点 = Usb设备. getInterface(0).getEndpoint(1);    //通过获取设备的一个端口,因为我知道这51只有一个端口,并且端口号是0,然后通过端口获得发送节点。
                UsbEndpoint 接收节点 = Usb设备. getInterface(0).getEndpoint(0);    //并且我知道这个设备发送节点为1,接收节点为0,CH340芯片默认都是这样
                UsbDeviceConnection 连接= Usb管理. openDevice(Usb设备);            //通过打开设备创建一个连接
                连接. controlTransfer(0x40, 0x9a, 0x1312, 0xB282, null, 0, 1000); //通过这个连接的控制传输函数设置波特率为9600,数据位8,停止位1,无校验,这个只适用CH34X,不同设备根据不同驱动来计算设置
                连接. bulkTransfer(发送节点, "你好".getBytes("GBK"),4, 1000);       //通过这个连接的大容量传输函数发送"你好"到51单片机。其中"发送节点"决定发送方向,getByte将"你好"转换为字节数组,转码规则为"GBK"
                byte[] 返回字节= new byte[4];                                     //新建一字节数组作为接收的容器,名称为返回字节
                连接 .bulkTransfer(接收节点, 返回字节, 4, 1000);                     //通过这个连接来接收51单片机发送的"你好","4"代表接收4个字节,一个汉字两个字节,1000代表等待接收1s,超时则接收不到。
                Toast.makeText(this, new String(返回字节, "GBK"), Toast.LENGTH_LONG).show();//String函数将返回的字节数组转化为汉字,然后做成气泡提示输出。Toast.LENGTH_LONG代表气泡停留的时长。
            }
            catch (Exception e){}
    
    1. MainActivity.Java中import 处加入这6项,代表导入包
    import android.content.Context;
    import android.hardware.usb.UsbManager;
    import android.hardware.usb.UsbDevice;
    import android.hardware.usb.UsbDeviceConnection;
    import android.hardware.usb.UsbEndpoint;
    import android.widget.Toast;
    
    1. AndroidManifest.xml的文件的intent-filter意图过滤器,之间加入51单片机插入事件,这是插入单片机,手机弹出获取权限窗口的关键。
     <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    
    1. 在AndroidManifest.xml文件的activity添加以下代码,此代码指向一个路径和文件名,这个文件存放可用的设备ID,第6部就是在指定路径添加这个文件。
     <meta-data
                    android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"   
                    android:resource="@xml/device_filter"/>
    
    1. 在res资源文件夹下的,xml的文件夹下创建一device_filter.xml 来存放可用设备ID,只有这些ID才可以触发弹出权限窗口,如果ID为空或不正确,则任意设备都可触发弹窗。单片机设备ID可以通过电脑的设备管理器查看,不知道就不要填。
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <usb-device
            vendor-id="6790"
            product-id="29987"/>
    </resources>
    
    展开全文
  • VB for android核心代码,由java写成,基于google simple
  • 核心代码: if (localUrl == null) { localUrl = Environment.getExternalStorageDirectory() .getAbsolutePath() "/VideoCache/" System.currentTimeMillis() ".mp4"; } Log.d("localUrl: " , localUrl); ...
  • 主要介绍了Android开发中编写蓝牙功能的核心部分讲解,包括扫描和配对以及修改蓝牙设备可见性等操作,需要的朋友可以参考下
  • 主要介绍了android的时间对话框核心代码,需要的朋友可以参考下
  • Android端增量更新实现,主要涉及bspatch.c和bsdiff.c的调用,实现apk文件的差异包和合并功能,博客地址:https://blog.csdn.net/u014389362/article/details/80068116
  • android一年学习资料-Android学习核心资料-含代码 Android platform是一个用于开发移动程序的软件包,它包括了操作系统、中间件及一些关键应用。开发者能使用android SDK为Android platform开发应用,这些应用使用...
  • 核心代码 开启闪光灯 camera = Camera.open(); Parameters parameters = camera.getParameters(); parameters.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(parameters); ...
  • 代码介绍:主要知识点:1/ 全屏(可以通过XML文件进行描述,也可以通过代码进行控制):styel.XML:[code]style name=style_Fullscreen item name=android:windowFullscreentrue/item item name=android:...
  • 闲话少唠,代码先读为快(核心代码) 1. View 中代码,泛型中传入P 和m,并绑定彼此之间的关系 public class FirstTabFragment extends BaseFragment,FirstModel> @Override public void initPresenter() { ...
  • Android实验核心代码

    2014-06-24 10:42:07
    记事本的核心代码,包含新建,删除,添加,保存等
  • 本篇文章主要介绍了Android优化方案之Fragment的懒加载实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 刚刚开始学习二维码,发现的资料,大家一起来学习
  • 北京信息职业技术学院 | 范美英 Android中使用菜单资源完成游记应用的核心代码与说明 要求说明 如左图所示 在应用的首界面中显示图片和文字 长按文本时出现上下文菜单其中显示可设置的字号大小 单击Menu键时弹出如图...
  • 核心类分析 类 功能 DownloadTask 下载任务,保存部分关键信息,非实际下载工作 DownloadInfo 下载信息,保存所有信息 DownloadJob 实现Runnable接口,实际下载工作,负责网络请求,数据库信息更新 ...
  • Qt On Android核心编程 源码
  • 使用git工具抽取的源码 并做了整理 包含核心包源码,放入eclipse直接可看
  • [x] 提供播放器核心类 PLMediaPlayer [x] 提供 PLVideoView 控件 [x] 提供 PLVideoTextureView 控件 [x] 支持多种画面预览模式 [x] 支持画面旋转(0度,90度,180度,270度) [x] 支持纯音频播放,并支持后台运行 [x...
  • AndroidAndroid代码段和核心API使用情况
  • ;准备图片资源;activity_main.xml布局的代码;activity_main.xml布局的代码;activity_main.xml布局的代码;MainActivity的全貌;范美英. Android移动应用开发案例教程. 机械工业出版社
  • Android核心技术与实例详解,源代码
  • android核心技术与实例详解光盘源代码13---18章
  • 魅族MX核心代码.zip

    2019-07-19 08:54:17
    虽然魅族自M9以来就一直在使用Android系统,却一直没有根据协议开源所使用的Linux核心。如今距离MX已经上市接近一年,魅族在近日终于将旗 下手机的核心代码上传至Github,支持的机型包括M030、M031和M032。 由于...
  • 注入的核心代码

    2014-11-09 13:21:22
    Android中进程间注入的核心代码实现
  • android 核心技术 代码

    2012-08-27 23:42:41
    android核心技术代码,各章都有的,放心下载 最后还有两个大工程,借鉴性较强

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 196,168
精华内容 78,467
关键字:

安卓核心代码