Android系统源码 目录结构

前言:Android官方在线看源码地址

https://cs.android.com/

[图片上传失败...(image-797273-1690983015232)]

1.Android系统架构

Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。

[图片上传失败...(image-788fe7-1690983015232)]

AOSP 架构

AOSP 的软件堆栈包含以下层:
[图片上传失败...(image-984efd-1690983015232)]
图 1. AOSP 软件堆栈架构。

下面列出了图 1 中使用的术语的定义:

  • Android 应用

    完全使用 Android API 开发的应用。Google Play 商店广泛用于查找和下载 Android 应用,不过也有许多其他替代方案。在某些情况下,设备制造商可能希望预安装 Android 应用以支持设备的核心功能。如果您对开发 Android 应用感兴趣,请访问 developers.android.com

  • 特权应用

    使用 Android 和系统 API 组合创建的应用。这些应用必须作为特权应用预安装在设备上。

  • 设备制造商应用

    结合使用 Android API、系统 API 并直接访问 Android 框架实现而创建的应用。由于设备制造商可能会直接访问 Android 框架中的不稳定的 API,因此这些应用必须预安装在设备上,并且只能在设备的系统软件更新时进行更新。

  • 系统 API

    系统 API 表示仅供合作伙伴和 OEM 纳入捆绑应用的 Android API。这些 API 在源代码中被标记为 @SystemApi。

  • Android API

    Android API 是面向第三方 Android 应用开发者的公开 API。如需了解 Android API,请参阅 Android API 参考文档

  • Android 框架

    构建应用所依据的一组 Java 类、接口和其他预编译代码。框架的某些部分可通过使用 Android API 公开访问。框架的其他部分只能由 OEM 通过系统 API 来访问。Android 框架代码在应用进程内运行。

  • 系统服务

    系统服务是重点突出的模块化组件,例如 system_server、SurfaceFlinger 和 MediaService。Android 框架 API 提供的功能可以与系统服务进行通信,以访问底层硬件。

  • Android 运行时 (ART)

    AOSP 提供的 Java 运行时环境。 ART 会将应用的字节码转换为由设备运行时环境执行的处理器专有指令。

  • 硬件抽象层 (HAL)

    HAL 是一个抽象层,其中包含硬件供应商要实现的标准接口。借助 HAL,Android 可以忽略较低级别的驱动程序实现。借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统。如需了解详情,请参阅 HAL 概览

  • 原生守护程序和库

    该层中的原生守护程序包括 inithealthdlogdstoraged。这些守护程序直接与内核或其他接口进行交互,并且不依赖于基于用户空间的 HAL 实现。

    该层中的原生库包括 libclibloglibutilslibbinderlibselinux。这些原生库直接与内核或其他接口进行交互,并且不依赖于基于用户空间的 HAL 实现。

  • 内核

    内核是任何操作系统的中心部分,并与设备上的底层硬件进行通信。尽可能将 AOSP 内核拆分为与硬件无关的模块和特定于供应商的模块。如需了解 AOSP 内核组件的说明(包括其定义),请参阅内核概览

[图片上传失败...(image-a90d3-1690983015232)]

应用层

系统内置的应用程序以及非系统级的应用程序都是属于应用层。负责与用户进行直接交互,通常都是用Java进行开发的。

应用框架层(Java Framework)

应用框架层为开发人员提供了可以开发应用程序所需要的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java Framework。下面来看这一层所提供的主要的组件。

名称 功能描述
Activity Manager(活动管理器) 管理各个应用程序生命周期以及通常的导航回退功能
Location Manager(位置管理器) 提供地理位置以及定位功能服务
Package Manager(包管理器) 管理所有安装在Android系统中的应用程序
Notification Manager(通知管理器) 使得应用程序可以在状态栏中显示自定义的提示信息
Resource Manager(资源管理器) 提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等
Telephony Manager(电话管理器) 管理所有的移动设备功能
Window Manager(窗口管理器) 管理所有开启的窗口程序
Content Providers(内容提供器) 使得不同应用程序之间可以共享数据
View System(视图系统) 构建应用程序的基本组件

表1

系统运行库层(Native)

系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。下面分别来介绍它们。

1.C/C++程序库

C/C++程序库能被Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务,主要的C/C++程序库如下表2所示。

名称 功能描述
OpenGL ES 3D绘图函数库
Libc 从BSD继承来的标准C系统函数库,专门为基于嵌入式Linux的设备定制
Media Framework 多媒体库,支持多种常用的音频、视频格式录制和回放。
SQLite 轻型的关系型数据库引擎
SGL 底层的2D图形渲染引擎
SSL 安全套接层,是为网络通信提供安全及数据完整性的一种安全协议
FreeType 可移植的字体引擎,它提供统一的接口来访问多种字体格式文件

表2

2.Android运行时库

运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。

硬件抽象层(HAL)

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

Linux内核层

Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。
Android系统的五层架构就讲到这,了解以上的知识对以后分析系统源码有很大的帮助。

2.Android系统源码目录

我们要先了解Android系统源码目录,为后期源码学习打下基础。关于源码的阅读,你可以访问http://androidxref.com/来阅读系统源码。当然,最好是将源码下载下来。下载源码可以使用清华大学开源软件镜像站提供的Android 镜像:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 。如果觉得麻烦也可以查找国内的网盘进行下载,推荐使用该百度网盘地址下载:http://pan.baidu.com/s/1ngsZs,它提供了多个Android版本的的源码下载。

整体结构

各个版本的源码目录基本是类似,如果是编译后的源码目录会多增加一个out文件夹,用来存储编译产生的文件。Android7.0的根目录结构说明如下表所示。

Android源码根目录 描述
abi 应用程序二进制接口
art 全新的ART运行环境,Android5.0之后java虚拟机就使用ART
bionic 系统C库,Android改造的C/C++库, 比传统的glibc更精简,不受GPL限制,支持 pthread_cancel(), 不支持C++ exception和C++ STL模板编程
bootable 启动引导相关代码 包含了recovery程序(恢复出厂/升级)的代码
build 存放系统编译规则及generic等基础开发包配置 Android编译系统,定义了各种编译规则,并包含通用产品配置
cts Android兼容性测试套件标准,CTS 是一个自动化测试套件,包含PC端和设备端(被测设备), 对手机的硬件,软件,接口,性能进行测试 ,测试项目包含平台 API 测试,平台 Intent,蓝牙设备的连接状况, 相机拍照功能等,通过make cts编译, out/host/linux-x86/cts/下生成android-cts文件夹。由于Android是开源的,对于Google Android的开发联盟中的Motorola、Samsung、Qualcomm 、Sony Ericsson、中国移动、ZTE、华为等,底层的代码也是开放的。手机制造商及运营商可以在Android上打造,定制自己特有的手机操作系统,这势必在源码级别上对Android系统进行代码的添加和更改。如果不规范这些更改则会给上层的应用开放的移植带来问题(那个时候你会看到MOTO上跑的愤怒的小鸟会在三星的Android手机上运行不了,每个应用需要都要发布不同厂商的Android手机的版本),只有通过CTS测试的Android手机系统,Google才会颁发许可,以保证不同生产商之间的Android系统的兼容
dalvik Android Dalvik虚拟机相关内容,主要是提供了一下工具,如dexdump, vm主代码已经移除
developers 开发者目录, 一些应用程序的参考实例demo代码
development 应用程序开发相关 提供应用开发的工具, 应用例子,monkey命令,shell脚本和python脚本:development/scripts/stack:用于展开进程异常时的堆栈信息, 配合tombstone文件development/scripts/gdbclient.py: 用于gdb调试development/scripts/native_heapdump_viewer.py脚本将dumpheap进程结果转换成更易读的html格式development/tools/make_keys: 系统签名生成器development/tools/idegen: 用于生成android.ipr、android.iml IEDA工程配置文件,可以用android studio来导入android源码
device 设备相关配置 设备产品定制目录, 该目录是厂商和产品公司定制文件比较多的地方
vendor 厂商定制目录,该目录可以新建出来
docs 参考文档目录
external 开源模组相关文件 外部第三方开源的库和工具,比如ppp, wpa_supplicant, libz, libcurl等
frameworks 应用程序框架,Android系统核心部分,由Java和C++编写, 包括各种系统资源, 后台服务, SystemUI, 大部分都是java代码, 同时也包含了各种子系统的native代码, 如av, net等
hardware 主要是硬件抽象层的代码, 如gps, wifi, viberate
kernel 内核源码,厂商可以将内核源码集成到该目录
libcore 核心库相关文件 Android 系统中支持众多 Java 标准的库,例如 java.lang 包,libart库,JSON库
libnativehelper 动态库,实现JNI库的基础 ,JNI编程时调用的各种接口实现代码, 如findClass(), 最终编译成libnativehelper.so
ndk NDK相关代码,帮助开发人员在应用程序中嵌入C/C++代码
out 编译完成后代码输出在此目录
packages 应用程序包,系统内置的app源码, 如设置, 墙纸,输入法,屏保等,apps:核心应用程序,inputmethods:输入法目录,providers:内容提供者目录,screensavers:屏幕保护,services:通信服务,wallpapers:墙纸
pdk Platform Development Kit 的缩写,平台开发套件, PDK的目标是帮助芯片组供应商和原始设备制造商迁移到新的版本。在PDK推出之前,未能参与Google早期开发设备计划的OEM厂商和半导体供应商必须等到Android开源版本公布后,才能开始进行开发。而从Jelly Bean,也就是Android 4.1版本开始Google在发布新的Android版本之前会Release给与其签约过的OEM厂商和半导体供应商PDK(PDK的获取需要授权,因为PDK中的新版Android尚未正式发布),这样OEM厂商不会再落后于Google挑选的独家早期开发伙伴。PDK版本只包含开发android HAL(硬件抽象层)所必需的组件。请注意,完整的android版本是PDK版本的超集,并且没有单独的PDK发布给公众
platform_testing Android平台测试程序
prebuilts 预编译文件夹, x86和arm架构下预编译的一些资源,如ndk工具包, gcc编译器等
sdk sdk和模拟器,编译sdk规则目录, Android的SDK包含该平台为应用程序开发人员提供的开发工具,主要是所有公开API的集合,应用程序开发人员可以借助SDK中的API快速的进行应用的开发.
system Android底层文件系统库、应用和组件,如busybox, init进程
test Android Vendor测试框架,如vts(vendor test suit) ,Mainline Test Suite (MTS), mltsvts的概念: CTS确保保了 APP 与 Android Framework 之间有一致的调用接口(API),这使得 APP 开发者编写的同一款程序可以运行在不同系统版本(向前兼容)、不同硬件平台、不同厂商制造的不同设备上。 VTS 类似 CTS,通过对 Vendor Interface 进行测试,确保同一个版本的 Android Framework 可以运行在不同 HAL 上,或不同 Android Framework 可以运行在 同一个 HAL 上。 通过这样的 Framework / HAL 分离设计和接口一致性保证,也使得 8.0 版本之后的 Android 系统在进行升级时,可以直接对 Framework 进行升级而不用考虑 HAL 层的改动,从而缩短了用户手上设备得到系统升级 OTA 推送的时间Mainline Test Suite (MTS), MTS由一组测试框架和测试用例组成,旨在帮助增强主线分支代码的健壮性、可靠性和合规性。mlts是Android 机器学习测试套件
toolchain 工具链文件,一些python测试脚本
tools 工具文件,一些特殊命令, 如acloud命令用于连接谷歌云端工作站的,apkzlib用于apk打包的
Makefile 全局Makefile文件,用来定义编译规则

表3
从表3可以看出,系统源码分类清晰,并且内容庞大且复杂。接下来分析packages中的内容,也就是应用层部分。

应用层部分

应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。源码根目录中的packages目录对应着系统应用层。它的目录结构如表4所示。

packages目录 描述
apps 核心应用程序
experimental 第三方应用程序
inputmethods 输入法目录
providers 内容提供者目录
screensavers 屏幕保护
services 通信服务
wallpapers 墙纸

表4

从目录结构可以发现,packages目录存放着系统核心应用程序、第三方的应用程序和输入法等等,这些应用都是运行在系统应用层的,因此packages目录对应着系统的应用层。

应用框架层部分

应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。 应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如表5所示。

/frameworks/base目录 描述 /frameworks/base目录 描述
api 定义API cmds 重要命令:am、app_proce等
core 核心库 data 字体和声音等数据文件
docs 文档 graphics 图形图像相关
include 头文件 keystore 和数据签名证书相关
libs location 地理位置相关库
media 多媒体相关库 native 本地库
nfc-extras NFC相关 obex 蓝牙传输
opengl 2D/3D 图形API packages 设置、TTS、VPN程序
sax XML解析器 services 系统服务
telephony 电话通讯管理 test-runner 测试工具相关
tests 测试相关 tools 工具
wifi wifi无线网络

表5

C/C++程序库部分

系统运行库层(Native)中的 C/C++程序库的类型繁多,功能强大,C/C++程序库并不完全在一个目录中,这里给出几个常用且比较重要的C/C++程序库所在的目录位置。

目录位置 描述
bionic/ Google开发的系统C库,以BSD许可形式开源。
/frameworks/av/media 系统媒体库
/frameworks/native/opengl 第三方图形渲染库
/frameworks/native/services/surfaceflinger 图形显示库,主要负责图形的渲染、叠加和绘制等功能
external/sqlite 轻量型关系数据库SQLite的C++实现

表6讲完 C/C++程序库部分,剩下的部分我们在表3已经给出:Android运行时库的代码放在art/目录中。硬件抽象层的代码在hardware/目录中,这一部分是手机厂商改动最大的一部分,根据手机终端所采用的硬件平台会有不同的实现。

system目录

Android作为linux系统, 在构建最小系统时,需要祖先init进程, 依赖库,二进制工具linux命令,以及各种守护进程等, system目录就提供了这些东西,该目录大部分都是C/C++代码

目录位置 描述
apex apexd守护进程源码,负责处理apex安装包的。
ashmemd
bpf
bpfprogs
bt Android bluedroid协议栈
ca-certificates
chre Context Hub Runtime Environment (CHRE),用于平衡大小核运行不同程序的场景, 提供api,保证小型的本机应用程序(称为nanoapps )在低功耗处理器上执行
connectivity 包含wificond进程,该进程通过标准 nl80211命令与WLAN 驱动程序进行通信
core 包含各种依赖库,adb,祖先init进程源码,lmkd,logcat, toolbox
extras 各种额外的命令工具, 比如su,memtrack(追踪graphic相关内存),playwav命令,以及一些测试代码
gatekeeper 防护程序,如锁屏密码等
gsid 通用系统镜像守护进程
hardware 网络相关的HIDL描述文件
hwservicemanager HAL服务管理中心,负责管理系统中的所有HAL服务,由init进程启动,属于vendor的binder通信机制,类似framework中的binder
iorap IOrap用于缩短应用程序的启动时间,该目录包含iorapd守护进程和相应的库文件
keymaster
libfmq
libhidl 硬件接口定义语言依赖库
libhwbinder hwbinder依赖库
libsysprop sysprop说明文件 (.sysprop) 将系统属性定义为 API, 在java/c++代码中可以通过api访问跨分区的属性,类似以前android版本中的SystemProperties
libufdt
libvintf
linkerconfig
media 包括alsa、audio、camera相关的头文件
netd Android中专门负责网络管理和控制的后台守护进程,如管理DNS,设置防火墙,带宽控制
nfc
nvram
security
sepolicy selinux权限策略配置目录
server_configurable_flags
testing
timezone
tools aidl,hidl可执行程序的源码路径
ucontainer
update_engine 负责A/B升级的核心逻辑代码
vold Volume守护进程,用来管理Android中存储类的热拔插事件,如设备增加,删除,修改等事件处理

framework目录

目录位置 描述
av audio/video, 如音视频解码器,录屏工具, 摄像头框架相关代码, 多媒体框架供上层程序调用的java API,连接java和C/C++的jni部分, 在framework/base/media 下
base 基础核心代码
compile 包含libbcc,mclinker(llvm编译器的插件) slang(Renderscript语言的编译器)
ex Android内部使用的公共类,如联系人、小部件、io, 以及全新的相机框架 Camera2的部分代码
hardware 描述传感器,虚拟现实VR,camera等硬件的HIDL接口的文件.hal
layoutlib 布局相关
minikin Android原生字体,连体字效果
ml 机器视觉
multidex 多dex加载器,大多数App,解压其apk后,一般只有一个classes.dex文件,采用MultiDex的App解压后可以看到有classes.dex,classes2.dex,… classes(N).dex
native c/c++本地语言编写的相关工具源码和特定硬件控制的头文件,如 bugreport, dumpstate, 各种硬件的访问权限声明
opt 一些UI插件和java后台服务,如timezonepicker,datetimepicker, colorpicker, 网络服务,如EthernetService, WifiService, 电话服务telephony
rs 渲染脚本rendor script
wilhelm 基于Khronos的OpenSL ES/OpenMAX AL的audio/multimedia实现
framework/av/ 下
目录位置 描述
aidl
apex
camera libcamera_client共享库,是camera框架部分的client代码
cmds 包括录屏工具,stagefright进程
drm
include
media 提供音视频编解码的各种库和工具,后台进程如audioserver, mediaserver(通过binder的进程间通信方式来完成其他进程(如音乐播放器)的请求)
services 多媒体相关的后台服务, 如cameraservice,audioflinger
MODULE_LICENSE_APACHE2
CleanSpec.mk
NOTICE
OWNERS
soundtrigger
tools
framework/base/ 下

其中base目录中是应用框架层的主要核心代码,目录结构如下

目录位置 描述
apct-tests
apex
api 声明了android应用框架层的类、属性和资源
boot
cmds 开机启动的进程代码和命令(脚本), 著名的zygote进程代码和启动动画代码就在此处
config
core/java Android应用开发锁依赖的各种包, 四大组件代码就在此,如android/app/Activity.java,android/app/Service.java,android/content/ContentProvider.java,/android/content/BroadcastReceiver.java
core/jni 服务于android系统java核心代码所需要的jni,被编译成libandroid_runtime.so
core/res 系统中所需要的各种资源, 图片,字符串,尺寸,布局文件等
core/proto
core/tests
core/xsd
data 系统默认的铃声,字体, 根文件系统etc目录部分配置文件,触摸需要的kl, kcm文件等
docs
drm Digital Rights Management(数字版权管理) ,应用根据与受版权保护的内容关联的许可限制来管理自己的内容,从而达到保护应用内容的知识产权
errorprone
graphic 为应用提供的android.graphics包,提供基本的图形原语(如画点画线,设置图形上下文等)另外和图形相关的包:android.view图形事件机制和android.widget包提供开发图形用户界面的控件
identity
keystore 提供android.security.keystore包, 应用可以通过KeyStore API生成密钥、使用密钥签名, keystorek可以保护密钥材料免遭未经授权的使用
libs 大部分都是c/c++代码,编译成so, 如Canvas 的drawing 操作转换为OpenGL 的操作的libhwui.so
location 定位相关接口,被App调用的,API包是android.location
lowpan 提供android.net.lowpan报,提供基于IPv6的低速无线个域网的API, lowpan功能与Zigbee类似
media 多媒体相关接口,被App调用的, 包含MediaPlayer代码
mime
mms
native 部分硬件相关的jni库:如sensor, net, 存储管理, 最后合并在libandroid.so中
nfc-extras
obex 蓝牙文件传输obex协议
omapi
opengl 提供android.opengl包, 提供android 2D/3D图形处理各种API
packages 著名的SystemUI,彩蛋,锁屏,SettingProvider(系统设置数据提供者)
proto
rs 提供android.renderscript 包,RenderScript 是Android 平台上的一种类C脚本语言,用于渲染绘图
samples
sax
services android开机启动的大部分后台服务,如PMS, AMS, WMS等
startop
telecomm
telephony 电话相关
test-base
test-legacy
test-mock
test-runner
tests
tools 提供应用开发的各种工具和脚本:如aapt
wifi 提供android.net.wifi包,如wifi扫描, p2p,hotspot2相关API

libcore目录

libcore 提供Android 系统中支持众多 Java 标准的库,例如 java.lang 包

目录位置 描述
luni Java 基础包、扩展包、组织提供的类库等,luni 实际上是 lang、util、net、io 这 4 个内容头字母的组合,通过文件luni/src/module/java/module-info.java可以导出的所有类
libart art 运行时部分相关包
dalvik dalvik 虚拟机相关的包
dom 文档对象模型,用于解析xml
json json 串在 Java 中的支持
xml 一种轻量级的xml解析工具
ojluni Open JDK 版的 Java 包,android7.0之后就开始用这个开源的java api

未完待续...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容