Android核心服务解析篇(二)——Android源码结构分析

android 同时被 2 个专栏收录
113 篇文章 1 订阅

获得Android源码后,我们来分析源码结构。源码的全部工程分为如下三个部分。


①Core Project:核心工程部分,这是建立Android系统的基础,保存在根目录的各个文件夹中。

②External Project:扩展工程部分,可以使其他开源项目具有扩展功能,保存在external文件夹中。

③Package:包部分,提供了Android的应用程序,内容提供者,输入法和服务,保存在package文件夹中。


在获取的Android4.3源码目录中,包含了原始Android的目标机代码,主机编译工具和仿真环境。解压缩下载的Android4.3源码包后,第一级别目录结构的具体说明如下表所示:


表2-1 Android源码的根目录
根目录描述
abiabi相关代码,应用程序二进制接口
bionicbionic C库
bootable启动引导相关代码
build存放系统编译规则及generic等基础开发配置包
ctsAndroid兼容性测试套件标准
dalvikdalvik Java虚拟机
development应用程序开发相关代码
device设备相关代码
docs介绍开源的相关文档
externalAndroid使用的一些开源的模组
frameworks核心框架——Java及C++语言,是Android应用程序的框架
gdk即时通信模块
hardware主要是硬件适配层HAL代码
kernelLinux的内核文件
libcore核心库相关
libnativehelper                        是Support functions for Android's class libraries的别名,表示动态库,是实现JNI库的基础
ndkndk相关代码。Android NDK(Android Native Development Kit)是一系列的开发工具,允许程序开发人员在Android应用程序中嵌入C/C++语言编写的非托管代码
out编译完成后的代码输出在此目录
packages应用程序包
pdkPlug Development Kit的缩写,是本地开发套件
prebuilts               x86和ARM架构下预编译的一些资源
sdkSDK及模拟器
system文件系统和应用及组件,是用C语言实现的
tools工具文件夹
vendor厂商定制代码
Makefile全局的Makefile





































文件夹目录如下:





1.Android源码的目录结构


当下载好Android源码后,可以看到,第一级目录有18个文件夹和一个Makefile文件,如果是编译后的源码目录,会增加一个out文件夹,用来存放编译产生的文件,下面具体来分析一下这些目录各自的作用:


|——abi //应用程序的二进制接口

|——bionic //Android基础C库的源码

|——bootable //系统启动器的源码

|——build //编译和配置系统所需要的配置文件和脚本文件

|——cts //Android兼容性测试标准

|——dalvik //Android虚拟机源码

|——development //程序开发的模板和工具

|——device //设备相关代码

|——docs //开源的相关文档

|——external //Android使用的第三方开源库的源码

|——frameworks //应用程序框架源码

|——gdk //即时通信模块

|——hardware //硬件抽象层源码

|——libcore //相关核心库的代码

|——libnativehelper //动态库

|——ndk //NDK开发环境

|——packages //应用程序包

|——pdk //本地开发套件

|——prebuilt //x86和ARM架构下预编译的一些资源

|——sdk //SDK和模拟器相关代码

|——system //文件系统,应用和组件

|——Makefile //系统编译脚本


通过上面对源码根目录中的每个文件夹的介绍,可以看出源码是按照功能进行分类的,整个Android源码分为系统代码,工具,文档,开发环境,虚拟机,配置脚本和编译脚本等类别。


2.应用程序


在Android源码中,应用程序部分的功能是实现UI界面,开发人员基于SDK开发的APK包便属于应用程序层。应用程序层在Android系统中处于最顶层,Android 4.3源码结构中的packages目录用来实现系统的应用程序,此目录的具体结构如下所示:


packages /

|——apps //应用程序库

|——|——BasicSmsReceiver//基础短信接收

|——|——Bluetooth//蓝牙

|——|——Browser//浏览器

|——|——Calculator//计算器

|——|——Calendar//日历

|——|——Camera//照相机

|——|——CellBroadcastReceiver//单元广播接收

|——|——CertInstaller//被调用的包,在Android中安装数字签名

|——|——Contacts//联系人

|——|——DeskClock//桌面时钟

|——|——Email//电子邮件

|——|——Exchange//Exchange服务

|——|——Gallery//图库

|——|——Gallery2//图库2

|——|——HTMLViewer//HTML查看器

|——|——KeyChain//密码管理

|——|——Launcher2 //启动器

|——|——Mms//彩信

|——|——Music//音乐

|——|——MusicFX//音频增强

|——|——Nfc//近场通信

|——|——PackageInstaller//包安装器

|——|——Phone//电话

|——|——Protips//主屏幕提示

|——|——Provision//引导设置

|——|——QuickSearchBox//快速搜索框

|——|——Settings//设置

|——|——SoundRecorder//录音机

|——|——SpareParts//系统设置

|——|——SpeechRecorder//录音程序

|——|——Stk//sim卡相关

|——|——Tag//标签

|——|——VideoEditor//视频编辑

|——|——VoiceDialer//语音编号

|——experimental//非官方的应用程序

|——|——BugReportSender//Bug的报告程序

|——|——Bummer

|——|——CameraPreviewTest//照相机预览测试程序

|——|——DreaamTheater

|——|——ExampleImsFramework

|——|——LoaderApp

|——|——NotificationLog

|——|——NotificationShowcase

|——|——procstatlog

|——|——RpcPerformance

|——|——StrictModeTest

|——inputmethods//输入法

|——|——LatinIME//拉丁文输入法

|——|——OpenWnn//OpenWnn输入法

|——|——PinyinIME//拼音输入法

|——providers//提供器

|——|——ApplicationsProvider//应用程序提供器,提供应用程序所需的界面

|——|——CalendarProvider//日历提供器

|——|——ContactsProvider//联系人提供器

|——|——DownloadProvider//下载管理提供器

|——|——DrmProvider//数据库相关

|——|——GoogleContactsProvider//Google联系人提供器

|——|——MediaProvider//媒体提供器

|——|——TelephonyProvider//彩信提供器

|——|——UserDictionaryProvider//用户字典提供器

|——screensavers//屏幕保护

|——|——Basic//基本屏幕保护

|——|——PhotoTable//照片方格

|——|——WebView //网页

|——wallpapers//墙纸

|——|——Basic//系统内置墙纸

|——|——Galaxy4//S4内置墙纸

|——|——HoloSpiral//手枪皮套墙纸

|——|——LivePicker

|——|——MagicSmoke

|——|——MusicVisualization

|——|——NoiseField

|——|——PhaseBeam


通过上面的目录结构可以看出,在packages目录中包含了应用程序相关的包或者资源文件,不但包括系统自带的应用程序,也包括第三方开发的应用程序和屏幕保护和墙纸等应用。


3.应用程序框架


应用程序框架是Android系统中的核心部分,也就是SDK部分,它会提供接口给应用程序使用,同时应用程序框架又会与系统服务,系统程序库,硬件抽象层的关联,所以其作用十分重大,应用程序框架的实现代码大部分都在/frameworks/base和/frameworks/av目录下。


frameworks/base的目录结构如下所示:


frameworks/base

|——api //全是XML文件,定义了API

|——cmds //Android中的重要命令(am,app_proce等)

|——core //核心库

|——data //声音字体等数据文件

|——docs //文档

|——drm //数字版权管理

|——graphics //图形图像

|——icu4j //用于解决国际化问题

|——include //头文件

|——keystore //数字签名证书相关

|——libs //库

|——location //地理位置

|——media //多媒体

|——native //本地库

|——nfc-extras //NFC相关

|——obex //蓝牙传输

|——opengl //OpenGL相关

|——packages //设置,TTS,VPN程序

|——policy //锁屏界面相关

|——sax //XML解析器

|——services //Android服务

|——telephony //电话相关

|——test-runner //测试相关

|——tests //测试相关

|——tools //工具

|——voip //可视通话

|——wifi //无线网络


以上这些文件包含了应用程序框架层的大部分代码,正是这些目录下的文件构成了Android的应用程序框架层,暴露出接口给应用程序调用,同时衔接系统程序库和硬件抽象层,形成一个由上至下的调用过程。


4.系统服务


Android应用程序框架层的大部分实现代码被保存在/frameworks/base目录下,其实在这个目录中还有一个名为service的目录,里面的代码用于实现Android系统服务,其目录结构如下所示:


frameworks/base/services

|——common_time //日期时间相关的服务

|——input //输入系统服务

|——java //其他重要服务的Java层

|——jni //其他重要服务的JNI层

|——tests //测试相关


其中java和jni两个目录分别是一些其他的服务的Java层和JNI层实现,java目录下的目录结构以及其他Android系统服务的相关说明如下所示:


frameworks/base/services/java/com/android/server

|——accessibility

|——am

|——connectivity

|——display

|——dreams

|——drm

|——input

|——location

|——net

|——pm

|——power

|——updates

|——usb

\——wm

|——AlarmManagerService.java//闹钟服务

|——AppWidgetService.java//应用程序小工具服务

|——AppWidgetServiceImpl.java

|——AttributeCache.java

\——BackupManagerService.java//备份服务

|——BatteryService.java//电池相关服务

|——BluetoothManagerService.java//蓝牙

|——BootReceiver.java

|——BrickReceiver.java

|——CertBlacklister.java

|——ClipboardService.java

|——CommonTimeManagementService.java//时间管理服务

|——ConnectivityService.java

|——CountryDetectorService.java

|——DevicePolicyManagerService.java

|——DeviceStorageMonitorService.java//设备存储器监听服务

|——DiskStatsService.java//磁盘状态服务

|——DockObserver.java//底座监视服务

|——DropBoxManagerService.java

|——EntropyMixer.java

|——EventLogTags.logtags

|——INativeDaemonConnectorCallbacks.java

|——InputMethodManagerService.java//输入法管理服务

|——IntentResolver.java

|——IntentResolverOld.java

|——LightsService.java

|——LocationManagerService.java//地理位置服务

|——MasterClearReceiver.java

|——MountService.java//挂载服务

|——NativeDaemonConnector.java

|——NativeDaemonConnectorException.java

|——NativeDaemonEvent.java

|——NetworkManagementService.java//网络管理服务

|——NetworkTimeUpdateService.java

|——NotificationManagerService.java//通知服务

|——NsdService.java

|——PackageManagerBackupAgent.java

|——PreferredComponent.java

|——ProcessMap.java

|——RandomBlock.java

|——RecognitionManagerService.java

|——SamplingProfilerService.java

|——SerialService.java//NFC相关

|——ServiceWatcher.java

|——ShutdownActivity.java

|——StatusBarManagerService.java//状态栏管理服务

|——SystemBackupAgent.java

|——SystemService.java

|——TelephonyRegistry.java

|——TextServicesManagerService.java

|——ThrottleService.java

|——TwilightCalculator.java

|——TwilightService.java

|——UiModeManagerService.java

|——UpdateLockService.java//锁屏更新服务

|——VibratorService.java//震动服务

|——WallpaperManagerService.java//壁纸服务

|——Watchdog.java//看门狗

|——WifiService.java//无线网络服务

|——WiredAccessoryManager.java//无线设备管理服务


从上面的文件夹和文件可以看出,Android中涉及的服务种类有:界面,网络,电话等核心模块,这些专属服务是系统级别的服务,这些系统服务一般都会在Android系统启动的时候加载,在系统关闭的时候结束,受到系统的管理,应用程序并没有权力去打开或者关闭,它们会随着系统的运行一直在后台运行,供应用程序和其他组件来使用。


另外,在framework/av/目录下面有一个services目录,在此目录中存放的是音频和照相机的服务的实现代码,此目录的具体结构如下所示:


frameworks/av/services

|——audioflinger//音频管理服务

|——camera//照相机的管理服务


av/services目录主要用来支持Android系统中的音频和照相机服务。


5.系统程序库


Android4.3程序库的类型非常多,功能也非常强大。在接下来的内容中,将简要讲解Android4.3源码中的一些常用并且重要的系统程序库的知识。


㈠系统C库


Android系统采用的是一个从BSD继承而来的标准的系统函数库bionic,在源码根目录下有这个文件夹,其目录结构如下所示:


bionic/

|——libc//C库

|——libdl//动态链接库相关

|——libm //数学库

|——libstdc++ //C++实现库

|——libthread_db //线程库

|——linker //连接器相关

|——test //测试相关


㈡媒体库


Android中的媒体库在2.3版之前是由OpenCore实现的,2.3版之后Stragefright被替换了,OpenCore成为新的多媒体的实现库。同时Android自带了一些音视频的管理库,用于管理多媒体的录制,播放,编码和解码等功能。


Android的多媒体程序库的实现代码主要在/frameworks/av/media目录中,其目录结构如下:


frameworks/av/media/

|——common_time //时间相关

|——libeffects //多媒体效果

|——libmedia //多媒体录制,播放

|——libmedia_native //里面只有一个Android。迥,用来编译native文件

|——libmediaplayerservice//多媒体播放服务的实现库

|——libstagefright //Stagefright的实现库

|——mediaserver //跨进程多媒体服务

|——mtp //MTP协议的实现(媒体传输协议)


㈢图层显示库


Android中的图层显示库主要负责对显示子系统的管理,负责图层的渲染,叠加,绘制等功能,提供了2D和3D图层的无缝融合,是整个Android系统显示的“大脑中枢”,其代码在/frameworks/native/services/surfaceflinger/目录下,其目录结构如下所示:


frameworks/native/services/surfaceflinger/

|——DisplayHardware//显示底层相关

|——tests//测试

|——Android.mk//MakeFile文件

|——Barrier.h

|——Client.cpp//显示的客户端实现文件

|——Client.h

|——clz.cpp

|——clz.h

|——DdmConnection.cpp

|——DdmConnection.h

|——DisplayDevice.cpp//显示设备相关

|——DisplayDevice.h

|——EventThread.cpp//消息线程

|——EventThread.h

|——GLExtensions.cpp//OpenGL扩展

|——GLExtensions.h

|——Layer.cpp//图层相关

|——Layer.h

|——LayerBase.cpp//图层基类

|——LayerBase.h

|——LayerDim.cpp//图层相关

|——LayerDim.h

|——LayerScreenshot.cpp//图层相关

|——LayerScreenshot.h

|——MessageQueue.cpp//消息队列

|——MessageQueue.h

|——MODULE_LICENSE_APACHE2//证书

|——SurfaceFlinger.cpp//图层管理者,图层管理的核心类

|——SurfaceFlinger.h

|——SurfaceTextureLayer.cpp//文字图层

|——SurfaceTextureLayer.h

|——Transform.cpp

|——Transform.h


㈣网络引擎库


网络引擎库主要是用来实现Web浏览器的引擎,支持Android的Web浏览器和一个可嵌入的Web视图,这是采用第三方开发的浏览器引擎Webkit实现的,Webkit的代码在/external/webkit/目录下,其目录结构如下所示:


external/webkit/

|——Examples //Webkit的例子

|——LayoutTests//布局测试

|——PerformanceTests//表现测试

|——Source//Webkit源代码

|——Tools//工具

|——WebKitLibraries//Webkit用到的库

|——Android.mk//Makefile

|——bison_check.mk

|——CleanSpec.mk

|——MODULE_LICENSE_LGPL//证书

|——NOTICE

|——WEBKIT_MERGE_REVISION//版本信息


㈤3D图形库


Android中的3D图形渲染是采用OpenGL来实现的,OpenGl是开源的第三方图形渲染库,使用该库可以实现Android中的3D图形硬件加速或者3D图形软件加速功能,是一个非常重要的功能库。从Android 4.3开始,支持最新,最强大的OpenGL ES3.0.其实现代码在/frameworks/native/opengl中,其目录结构如下所示:


frameworks/native/opengl/

|——include //OpenGL中的头文件

|——libagl //在Mac OS上的库

|——libs //OpenGL的接口和实现库

|——specs //OpenGL的文档

|——tests //测试相关

|——tools //工具库


㈥SQLite


SQLite是Android系统自带的一个轻量级关系数据库,其实现源代码已经在网上开源。SQLite的优点是操作方便,运行速度较快,占用资源较少等,比较适合在嵌入式设备上面使用。SQLite是Android系统自带的实现数据库功能的核心库,其代码实现分为Java和C两个部分,Java部分的代码位于/frameworks/base/core/java/android/database,目录结构如下所示:


frameworks/base/core/java/android/database/

|——sqlite//SQLite的框架文件

|——AbstractCursor.java//游标的抽象类

|——AbstractWindowedCursor.java

|——BulkCursorDescriptor.java

|——BulkCursorNative.java

|——BulkCursorToCursorAdaptor.java//游标适配器

|——CharArrayBuffer.java

|——ContentObservable.java

|——ContentObserver.java

|——CrossProcessCursor.java

|——CrossProcessCursorWrapper.java//CrossProcessCursor的封装类

|——Cursor.java//游标实现娄

|——CursorIndexOutOfBoundsException.java//游标出界异常

|——CursorJoiner.java

|——CursorToBulkCursorAdaptor.java//适配器

|——CursorWindow.java//游标窗口

|——CursorWindowAllocationException.java//游标窗口异常

|——CursorWrapper.java//游标封装类

|——DatabaseErrorHandler.java//数据库错误句柄

|——DatabaseUtils.java//数据库工具类

|——DataSetObservable.java

|——DataSetObserver.java

|——DefaultDatabaseErrorHandle.java//默认数据库错误句柄

|——IBulkCursor.java

|——IContentObserver.aidl//aidl用于跨进程通信

|——MatrixCursor.java

|——MergeCursor.java

|——Observable.java

|——package.html

|——SQLException.java//数据库异常

|——StaleDataException.java


Java层的代码主要是实现SQLite的框架和接口的实现,使用户开发应用程序时能很简单地操作数据库,并且捕获数据库异常。


C++层的代码在/external/sqlite路径下,其目录结构如下所示:


external/sqlite/

|——android //Android数据库的一些工具包

|——dist //Android数据库底层实现


从上面Java和C部分的代码目录结构可以看出,SQLite在Android中还是有很重要的地位的,并且在SDK中会有开放的接口让应用程序可以很简单方便地操作数据库,对数据进行存储和删除。


6.系统运行库


众所周知,Android系统折应用层是采用Java开发的,由于Java语言的跨平台特性,Java代码必须运行在虚拟机中。正是因为这个特性,Android系统也自己实现了一个类似JVM但是更适用于嵌入式平台的Java虚拟机,这被称为dalvik。


dalvik功能等同于JVM,为Android平台上的Java代码提供了运行环境,dalvik本身是由C++语言实现的,在源码中的根目录下有dalvik文件夹,里面存放的是dalvik虚拟机的实现代码,其目录结构如下所示:


dalvik/

|——dalvikvm //入口目录

|——dexdump //dex反汇编

|——dexgen //dex生成相关

|——dexlist //dex列表

|——dexopt //与验证和优化

|——docs //文档

|——dvz //zygot相关

|——dx //dx工具,将多个Java转换为dex

|——hit

|——libdex //dex库的实现代码

|——opcode-gen

|——tests //测试相关

|——tools //工具

|——unit-tests //测试相关

|——vm //虚拟机的实现

|——Android.mk //Makefile

|——CleanSpec.mk

|——MODULE_LICENSE_APACHE2

|——NOTICE

|——README.txt


正是因为的上面这些代码实现的Android虚拟机,所以应用程序生成的二进制执行文件能够快速,稳定运行在Android系统上。


7.硬件抽象层


Android的硬件抽象是各种功能的底层实现,理论上,不同的硬件平台会有不同的硬件抽象层实现,这一个层次也是与驱动层和硬件层有紧密联系的,起着承上启下的作用,对上要实现应用程序框架层的接口,对下要实现一些硬件的基本功能,以及调用驱动层的接口。需要注意的是,这一层也是广大OEM厂商改动最大的一层,因为这一层的代码跟终端采用什么样硬件的硬件平台的很大的关系。源码中存放的是硬件抽象层框架的实现代码和一些平台无关的接口的实现。硬件抽象层代码在源码根目录下的hardware文件夹中,其目录结构如下所示:


hardware/

|——libhardware//新机制硬件库

|——libhardware_legacy//旧机制硬件库

|——ril//ril模块相关的底层实现


从上面的目录结构我们可以看出,硬件抽象层中主要是实现了一些底层的硬件库,用来实现应用层框架中的功能,至于其体硬件库中的哪些内容,我们可以继续分其目录结构,例如libhardware目录下的结构为:


hardware/libhardware/

|——include//入口目录

|——modules//dex反汇编

|——|——audio //音频相关底层库

|——|——audio_remote_submix//音频混合相关

|——|——gralloc //帧缓冲

|——|——hwcomposer //音频相关

|——|——local_time //本地时间

|——|——nfc //nfc功能

|——|——nfc-nci //nfc接口

|——|——power //电源

|——|——usbaudio //USB音频设备

|——|——Android.mk //Makefile

|——|——README.android

|——tests //dex生成相关

|——dexlist //dex列表

|——dexopt //验证和优化

|——docs //文档


从上面的目录结构我们可以分析出,libhardware目录主要是Android系统的某些功能的底层实现,包括audio,nfc,power。


libhardware_legacy目录与libhardware大同小异,只是针对旧的实现方式做的一套硬件库,其目录下还有uevent,wifi以及虚拟机的底层实现。这两个目录下的代码一般会由设备厂家根据自身的硬件平台来实现符合Android机制的硬件库。


ril目录下存放的是无线硬件设备与电话的实现,其目录结构如下所示:


hardware/ril/

|——include //头文件

|——libril //libril库

|——mock-ril

|——reference-ril //reference ril库

|——rild //ril守护进程

|——CleanSpec.mk


  • 11
    点赞
  • 8
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

简介 笔者当初为了学习JAVA,收集了很多经典源码源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲
Android虚拟机Dalvik完整源码,宝贵资源,欢迎下载! This directory contains the Dalvik virtual machine and core class library, as well as related tools, libraries, and tests. A note about the licenses and header comments --------------------------------------------- Much of the code under this directory originally came from the Apache Harmony project, and as such contains the standard Apache header comment. Some of the code was written originally for the Android project, and as such contains the standard Android header comment. Some files contain code from both projects. In these cases, the header comment is a combination of the other two, and the portions of the code from Harmony are identified as indicated in the comment. Here is the combined header comment: /* * Copyright (C) The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ---------- * * Portions of the code surrounded by "// BEGIN Harmony code" and * "// END Harmony code" are copyrighted and licensed separately, as * follows: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/license
©️2021 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值