网上资料很少,

不过还是找到一个比较详细的说明:

特地在此整理了下:

地址:http://blog.csdn.net/djy1992/article/details/9339787

 

  分为几个阶段:

  1、整个Android的多媒体框架OpenCore

  2、Player和Author的详细介绍

  2、OpenCore和Android其他部分的集成

  第一部分 OpenCore概述:

  OpenCore的另外一个常用的称呼是PacketVideo,它是Android的多媒体核心。事实上,PacketVideo是一家公司的名称,而OpenCore是这套多媒体框架的软件层的名称。在Android的开发者中间,二者的含义基本相同。对比Android的其它程序库,OpenCore的代码非常庞大,它是一个基于C++的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。

  OpenCore是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容:

  PVPlayer:提供媒体播放器的功能,完成各种音频(Audio)、视频(Video)流的回放(Playback)功能

  PVAuthor:提供媒体流记录的功能,完成各种音频(Audio)、视频(Video)流的以及静态图像捕获功能

  PVPlayer和PVAuthor以SDK的形式提供给开发者,可以在这个SDK之上构建多种应用程序和服务。在移动终端中常常使用的多媒体应用程序,例如媒体播放器、照相机、录像机、录音机等等。

  为了更好的组织整体的架构,OpenCore在软件层次在宏观上分成几个层次:

  

  OSCL:Operating System Compatibility Library (操作系统兼容库),包含了一些操作系统底层的操作,为了更好地在不同操作系统移植。包含了基本数据类型、配置、字符串工具、IO、错误处理、线程等内容,类似一个基础的C++库。

  PVMF:PacketVideo Multimedia Framework(PV多媒体框架),在框架内实现一个文件解析(parser)和组成(composer)、编解码的NODE,也可以继承其通用的接口,在用户层实现一些NODE。

  PVPlayer Engine:PVPlayer引擎。

  PVAuthor Engine:PVAuthor引擎。

  事实上,OpenCore中包含的内容非常多:从播放的角度,PVPlayer的输入的(Source)是文件或者网络媒体流,输出(Sink)是音频视频的输出设备,其基本功能包含了媒体流控制、文件解析、音频视频流的解码(Decode)等方面的内容。除了从文件中播放媒体文件之外,还包含了与网络相关的RTSP流(Real
Time Stream Protocol,实时流协议)。在媒体流记录的方面,PVAuthor的输入的(Source)是照相机、麦克风等设备,输出(Sink)是各种文件,包含了流的同步、音频视频流的编码(Encode)以及文件的写入等功能。

  在使用OpenCore的SDK的时候,有可能需要在应用程序层实现一个适配器(Adaptor),然后在适配器之上实现具体的功能,对于PVMF的NODE也可以基于通用的接口,在上层实现,以插件的形式使用。

==============================================================================

  第二部分 OpenCore的代码结构2.1 代码结构

  以开源Android的代码为例,OpenCore的代码在以下目录中:external/opencore/。这个目录是OpenCore的根目录,其中包含的子目录如下所示:

  android:这里面是一个上层的库,它基于PVPlayer和PVAuthor的SDK实现了一个为Android使用的Player和Author。

  baselibs:包含数据结构和线程安全等内容的底层库

  codecs_v2:这是一个内容较多的库,主要包含编解码的实现,以及一个OpenMAX的实现

  engines:包含PVPlayer和PVAuthor引擎的实现

  extern_libs_v2:包含了khronos的OpenMAX的头文件

  fileformats:文件格式的解析(parser)工具

  nodes:提供一些PVMF的NODE,主要是编解码和文件解析方面的。

  oscl:操作系统兼容库

  pvmi: 输入输出控制的抽象接口

  protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容

  pvcommon:pvcommon库文件的Android.mk文件,没有源文件。

  pvplayer:pvplayer库文件的Android.mk文件,没有源文件。

  pvauthor:pvauthor库文件的Android.mk文件,没有源文件。

  tools_v2:编译工具以及一些可注册的模块。

  在external/opencore/目录中还有2个文件,如下所示:

  Android.mk:全局的编译文件

  pvplayer.conf:配置文件

  在external/opencore/的各个子文件夹中包含了众多的Android.mk文件,它们之间还存在着“递归”的关系。例如根目录下的Android.mk,就包含了如下的内容片断:

  include $(PV_TOP)/pvcommon/Android.mk

  include $(PV_TOP)/pvplayer/Android.mk

  include $(PV_TOP)/pvauthor/Android.mk

  这表示了要引用pvcommon,pvplayer和pvauthor等文件夹下面的Android.mk文件。

  external/opencore/的各个Android.mk文件可以按照排列组合进行使用,将几个Android.mk内容合并在一个库当中。

  2.2 编译结构

  1.库的层次关系:在Android的开源版本中编译出来的内容,OpenCore编译出来的各个库如下所示:

  libopencoreauthor.so:OpenCore的Author库

  libopencorecommon.so:OpenCore底层的公共库

  libopencoredownloadreg.so :下载注册库

  libopencoredownload.so:下载功能实现库

  libopencoremp4reg.so:MP4注册库

  libopencoremp4.so:MP4功能实现库

  libopencorenet_support.so:网络支持库

  libopencoreplayer.so:OpenCore的Player库

  libopencorertspreg.so:RTSP注册库

  libopencorertsp.so:RTSP功能实现库

  这些库的层次关系如下图所示:

  

  OpenCore的各个库之间具有如下的关系:

  libopencorecommon.so是所有的库的依赖库,提供了公共的功能;

  libopencoreplayer.so和libopencoreauthor.so是两个并立的库,分别用于回放和记录,而且这两个库是OpenCore对外的接口库;

  libopencorenet_support.so提供网络支持的功能;

  一些功能以插件(Plug-In)的方式放入Player中使用,每个功能使用两个库,一个实现具体功能,一个用于注册。

  2.libopencorecommon.so库的结构

  libopencorecommon.so是整个OpenCore的核心库,它的编译控制的文件的路径为pvcommon/Android.mk,这个文件使用递归的方式寻找子文件:include $(BUILD_SHARED_LIBRARY)

include $(PV_TOP)//oscl/oscl/osclbase/Android.mk

include $(PV_TOP)//oscl/oscl/osclerror/Android.mk

include $(PV_TOP)//oscl/oscl/osclmemory/Android.mk

include $(PV_TOP)//oscl/oscl/osclutil/Android.mk

include $(PV_TOP)//oscl/pvlogger/Android.mk

include $(PV_TOP)//oscl/oscl/osclproc/Android.mk

include $(PV_TOP)//oscl/oscl/osclio/Android.mk

include $(PV_TOP)//oscl/oscl/osclregcli/Android.mk

include $(PV_TOP)//oscl/oscl/osclregserv/Android.mk

include $(PV_TOP)//oscl/unit_test/Android.mk

include $(PV_TOP)//oscl/oscl/oscllib/Android.mk

include $(PV_TOP)//pvmi/pvmf/Android.mk

include $(PV_TOP)//baselibs/pv_mime_utils/Android.mk

include $(PV_TOP)//nodes/pvfileoutputnode/Android.mk

include $(PV_TOP)//baselibs/media_data_structures/Android.mk

include $(PV_TOP)//baselibs/threadsafe_callback_ao/Android.mk

include $(PV_TOP)//codecs_v2/utilities/colorconvert/Android.mk

include $(PV_TOP)//codecs_v2/audio/gsm_amr/amr_nb/common/Android.mk

include $(PV_TOP)//codecs_v2/video/avc_h264/common/Android.mk

       这些被包含的Android.mk文件真正指定需要编译的文件,这些文件在Android.mk的目录及其子目录中。事实上,在libopencorecommon.so库中包含了以下内容:

OSCL的所有内容

Pvmf框架部分的内容(pvmi/pvmf/Android.mk)

基础库中的一些内容(baselibs)

编解码的一些内容

文件输出的node(nodes/pvfileoutputnode/Android.mk)

从库的结构中可以看出,最终生成库的结构与OpenCore的层次关系并非完全重合。libopencorecommon.so库中就包含了底层的OSCL的内容、PVMF的框架以及Node和编解码的工具。



3.libopencoreplayer.so库的结构



     libopencoreplayer.so是用于播放的功能库,它的编译控制的文件的路径为pvplayer/Android.mk,它包含了以下的内容:



include $(BUILD_SHARED_LIBRARY)

include $(PV_TOP)//engines/player/Android.mk

include $(PV_TOP)//codecs_v2/audio/aac/dec/util/getactualaacconfig/Android.mk

include $(PV_TOP)//codecs_v2/video/avc_h264/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/aac/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/gsm_amr/amr_nb/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/gsm_amr/amr_wb/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/gsm_amr/common/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/mp3/dec/Android.mk

include $(PV_TOP)//codecs_v2/utilities/m4v_config_parser/Android.mk

include $(PV_TOP)//codecs_v2/utilities/pv_video_config_parser/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_common/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_queue/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_h264/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_aac/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_amr/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_mp3/Android.mk

include $(PV_TOP)//codecs_v2/omx/factories/omx_m4v_factory/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_proxy/Android.mk

include $(PV_TOP)//nodes/common/Android.mk

include $(PV_TOP)//pvmi/content_policy_manager/Android.mk

include $(PV_TOP)//pvmi/content_policy_manager/plugins/oma1/passthru/Android.mk

include $(PV_TOP)//pvmi/content_policy_manager/plugins/common/Android.mk

include $(PV_TOP)//pvmi/media_io/pvmiofileoutput/Android.mk

include $(PV_TOP)//fileformats/common/parser/Android.mk

include $(PV_TOP)//fileformats/id3parcom/Android.mk

include $(PV_TOP)//fileformats/rawgsmamr/parser/Android.mk

include $(PV_TOP)//fileformats/mp3/parser/Android.mk

include $(PV_TOP)//fileformats/mp4/parser/Android.mk

include $(PV_TOP)//fileformats/rawaac/parser/Android.mk

include $(PV_TOP)//fileformats/wav/parser/Android.mk

include $(PV_TOP)//nodes/pvaacffparsernode/Android.mk

include $(PV_TOP)//nodes/pvmp3ffparsernode/Android.mk

include $(PV_TOP)//nodes/pvamrffparsernode/Android.mk

include $(PV_TOP)//nodes/pvmediaoutputnode/Android.mk

include $(PV_TOP)//nodes/pvomxvideodecnode/Android.mk

include $(PV_TOP)//nodes/pvomxaudiodecnode/Android.mk

include $(PV_TOP)//nodes/pvwavffparsernode/Android.mk

include $(PV_TOP)//pvmi/recognizer/Android.mk

include $(PV_TOP)//pvmi/recognizer/plugins/pvamrffrecognizer/Android.mk

include $(PV_TOP)//pvmi/recognizer/plugins/pvmp3ffrecognizer/Android.mk

include $(PV_TOP)//pvmi/recognizer/plugins/pvwavffrecognizer/Android.mk

include $(PV_TOP)//engines/common/Android.mk

include $(PV_TOP)//engines/adapters/player/framemetadatautility/Android.mk

include $(PV_TOP)//protocols/rtp_payload_parser/util/Android.mk

include $(PV_TOP)//android/Android.mk

include $(PV_TOP)//android/drm/oma1/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_rtsp/core/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_rtsp/node_registry/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_net_support/core/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_download/core/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_download/node_registry/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_mp4/core/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_mp4/node_registry/Android.mk

libopencoreplayer.so中包含了以下内容:

一些解码工具

文件的解析器(mp4)

解码工具对应的Node

player的引擎部分(engines/player/Android.mk)

为Android的player适配器(android/Android.mk)

识别工具(pvmi/recognizer)

编解码工具中的OpenMax部分(codecs_v2/omx)

对应几个插件Node的注册

libopencoreplayer.so中的内容较多,其中主要为各个文件解析器和解码器,PVPlayer的核心功能在engines/player/Android.mk当中,而android/Android.mk的内容比较特殊,它是在PVPlayer之上构建的一个为Android使用的播放器。

4.libopencoreauthor.so库的结构

     libopencoreauthor.so是用于媒体流记录的功能库,它的编译控制的文件的路径为pvauthor/Android.mk,它包含了以下的内容:

include $(BUILD_SHARED_LIBRARY)

include $(PV_TOP)//engines/author/Android.mk

include $(PV_TOP)//codecs_v2/video/m4v_h263/enc/Android.mk

include $(PV_TOP)//codecs_v2/audio/gsm_amr/amr_nb/enc/Android.mk

include $(PV_TOP)//codecs_v2/video/avc_h264/enc/Android.mk

include $(PV_TOP)//fileformats/mp4/composer/Android.mk

include $(PV_TOP)//nodes/pvamrencnode/Android.mk

include $(PV_TOP)//nodes/pvmp4ffcomposernode/Android.mk

include $(PV_TOP)//nodes/pvvideoencnode/Android.mk

include $(PV_TOP)//nodes/pvavcencnode/Android.mk

include $(PV_TOP)//nodes/pvmediainputnode/Android.mk

include $(PV_TOP)//android/author/Android.mk



libopencoreauthor.so中包含了以下内容:

一些编码工具(视频流H263、H264,音频流Amr)

文件的组成器(mp4)

编码工具对应的Node

表示媒体输入的Node(nodes/pvmediainputnode/Android.m)

author的引擎部分(engines/author/Android.mk)

为Android的author适配器(android/author/Android.mk)

libopencoreauthor.so中主要为各个文件编码器和文件组成器,PVAuthor的核心功能在engines/author/Android.mk当中,而android/author/Android.mk是在PVAuthor之上构建的一个为Android使用的媒体记录器。



5.其他库

       另外的几个库的Android.mk文件的路径如下所示:

网络支持库libopencorenet_support.so:

tools_v2/build/modules/linux_net_support/core/Android.mk



MP4功能实现库libopencoremp4.so和注册库libopencoremp4reg.so:

tools_v2/build/modules/linux_mp4/core/Android.mk

tools_v2/build/modules/linux_mp4/node_registry/Android.mk 



RTSP功能实现库libopencorertsp.so和注册库libopencorertspreg.so:

tools_v2/build/modules/linux_rtsp/core/Android.mk

tools_v2/build/modules/linux_rtsp/node_registry/Android.mk



下载功能实现库libopencoredownload.so和注册库libopencoredownloadreg.so:

tools_v2/build/modules/linux_download/core/Android.mk

tools_v2/build/modules/linux_download/node_registry/Android.mk

======================================================================

 第三部分 OpenCore OSCL简介 

OSCL,全称为Operating System Compatibility Library (操作系统兼容库),它包含了一些在不同操作系统中移植层的功能,其代码结构如下所示:

oscl/oscl

|-- config             :配置的宏

|-- makefile

|-- makefile.pv

|-- osclbase         :包含基本类型、宏以及一些STL容器类似的功能

|-- osclerror        :错误处理的功能

|-- osclio             :文件IOSocket等功能

|-- oscllib            :动态库接口等功能

|-- osclmemory :内存管理、自动指针等功能

|-- osclproc         :线程、多任务通讯等功能

|-- osclregcli        :注册客户端的功能

|-- osclregserv     :注册服务器的功能

`-- osclutil           :字符串等基本功能

         在oscl的目录中,一般每一个目录表示一个模块。OSCL对应的功能是非常细致的,几乎对C语言中每一个细节的功能都进行封装,并使用了C++的接口提供给上层使用。事实上,OperCore中的PVMF、Engine部分都在使用OSCL,而整个OperCore的调用者也需要使用OSCL。

在OSCL的实现中,很多典型的C语言函数被进行了简单的封装,例如:osclutil中与数学相关的功能在oscl_math.inl中被定义成为了内嵌(inline)的函数:

OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_log(double value)

{

         return (double) log(value);

}

OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_log10(double value)

{

         return (double) log10(value);

}

OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_sqrt(double value)

{

         return (double) sqrt(value);

}

         oscl_math.inl文件又被oscl_math.h所包含,因此其结果是oscl_log()等功能的使用等价于原始的log()等函数。



     很多C语言标准库的句柄都被定义成为了C++类的形式,实现由一些繁琐,但是复杂性都不是很高。以oscllib为例,其代码结构如下所示:

oscl/oscl/oscllib/

|-- Android.mk

|-- build

|   `-- make

|       `-- makefile

`-- src

    |-- oscl_library_common.h

    |-- oscl_library_list.cpp

    |-- oscl_library_list.h

    |-- oscl_shared_lib_interface.h

    |-- oscl_shared_library.cpp

    `-- oscl_shared_library.h

        oscl_shared_library.h是提供给上层使用的动态库的接口功能,它定义的接口如下所示:

class OsclSharedLibrary

{

public:

        OSCL_IMPORT_REF OsclSharedLibrary();

        OSCL_IMPORT_REF OsclSharedLibrary(const OSCL_String& aPath);

        OSCL_IMPORT_REF ~OsclSharedLibrary();

        OSCL_IMPORT_REF OsclLibStatus LoadLib(const OSCL_String& aPath);

        OSCL_IMPORT_REF OsclLibStatus LoadLib();

        OSCL_IMPORT_REF void SetLibPath(const OSCL_String& aPath);

        OSCL_IMPORT_REF OsclLibStatus QueryInterface(const OsclUuid& aInterfaceId, OsclAny*& aInterfacePtr);

        OSCL_IMPORT_REF OsclLibStatus Close();

        OSCL_IMPORT_REF void AddRef();

        OSCL_IMPORT_REF void RemoveRef();

}

        这些接口显然都是与库的加载有关系的,而在oscl_shared_library.cpp 中其具体的功能是使用dlopen()等函数来实现的。

=====================================================================================

第四部分 文件格式处理和编解码部分简介

  在多媒体方面,文件格式的处理和编解码(Codec)是很基础的两个方面的内容。多媒体应用的两个方面是媒体的播放(PlayBack)和媒体的记录(Recording)。

  在媒体的播放过程中,通常情况是从对媒体文件的播放,必要的两个步骤为文件的解析和媒体流的解码。例如对于一个mp4的文件,其中可能包括AMR和AAC的音频流,H263、MPEG4以及AVC(H264)的视频流,这些流被封装在3GP的包当中,媒体播放器要做的就是从文件中将这些流解析出来,然后对媒体流进行解码,解码后的数据才可以播放。

  在媒体的记录过程中,通过涉及到视频、音频、图像的捕获功能。对于将视频加音频录制成文件功能,其过程与播放刚好相反,首先从硬件设备得到视频和音频的媒体流,然后对其进行编码,编码号的流还需要被分层次写入到文件之中,最终得到组成好的文件。

  OpenCore有关文件格式处理和编解码部分两部分的内容,分别在目录fileformats和codecs_v2当中。这两部分都属于基础性的功能,不涉及具体的逻辑,因此它们被别的模块调用来使用,例如:构建各种Node。

  4.1 文件格式的处理

  由于同时涉及播放文件和记录文件两种功能,因此OpenCore中的文件格式处理有两种类型,一种是parser(解析器),另一种是composer(组成器)。

  fileformats的目录结构如下所示:fileformats

|-- avi


|   `-- parser

|-- common

|   `-- parser

|-- id3parcom

|   |-- Android.mk

|   |-- build

|   |-- include

|   `-- src

|-- mp3

|   `-- parser

|-- mp4

|   |-- composer

|   `-- parser

|-- rawaac

|   `-- parser

|-- rawgsmamr

|   `-- parser

`-- wav

    `-- parser



        目录包含各个子目录中,它们对应的是不同的文件格式,例如mp3、mp4和wav等。



   4.2 编解码



        编解码部分主要针对Audio和Video,codecs_v2的目录结构如下所示:

codecs_v2

|-- audio

|   |-- aac

|   |-- gsm_amr

|   |-- mp3

|   `-- sbc

|-- omx

|   |-- factories

|   |-- omx_aac

|   |-- omx_amr

|   |-- omx_common

|   |-- omx_h264

|   |-- omx_m4v

|   |-- omx_mp3

|   |-- omx_proxy

|   `-- omx_queue

|-- utilities

|   |-- colorconvert

|   |-- m4v_config_parser

|   `-- pv_video_config_parser

`-- video

    |-- avc_h264

    `-- m4v_h263

        在audio 和video目录中,对应了针对各种流的子目录,其中可能包含dec和enc两个目录,分别对应解码和编码。video目录展开后的内容如下所示:

`-- video

    |-- avc_h264

    |   |-- common

    |   |-- dec

    |   |-- enc

    |   `-- patent_disclaimer.txt

    `-- m4v_h263

        |-- dec

        |-- enc

        `-- patent_disclaimer.txt

        codecs_v2目录的子目录omx实现了一个khronos 

        OpenMAX的功能。OpenMAX是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出。OpenMAX
IL 1.0(集成层)技术规格定义了媒体组件接口,以便在嵌入式器件的流媒体框架中快速集成加速式编解码器。

        OpenMAX的设计实现可以让具有硬件编辑码功能的平台提供统一的接口和框架,在OpenMAX中可以直接使用硬件加速的进行编解码乃至输出的功能,对外保持统一的接口。但是在此处的OpenMAX则是一个纯软件的实现。

Android的多媒体框架OpenCore介绍的更多相关文章

  1. 多媒体的框架 - OpenCore框架概述

    OpenCore是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容:PVPlayer:提供媒体播放器的功能,完成各种音频 (Audio).视频(Video)流的回放(Playback)功能. ...

  2. Android框架简要介绍

    1.      Android架构直观图 下图展示了Android系统的主要组成部分: 总体上而言,Android系统结构由5个部分组成.从上到下,别人是Applications (Android应用 ...

  3. Android多媒体框架对音乐播放器的支持

    下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些.               1. MediaScannerReceiver                   这个广播接收者在接收到A ...

  4. 通过实例介绍Android App自动化测试框架--Unittest

    1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...

  5. Android系统介绍与框架(转)

    一.Andriod是什么? Android系统是Google开发的一款开源移动OS,Android中文名被国内用户俗称“安卓”.Android操作系统基于Linux内核设计,使用了Google公司自己 ...

  6. Android系统介绍与框架

    一.Andriod是什么? Android系统是Google开发的一款开源移动OS,Android中文名被国内用户俗称“安卓”.Android操作系统基于Linux内核设计,使用了Google公司自己 ...

  7. ①Android NuPlayer播放框架

    [时间:2016-09] [状态:Open] [关键词:android,nuplayer,开源播放器,播放框架,nuplayerdriver] 0 NuPlayer简介 Android2.3时引入流媒 ...

  8. Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

  9. [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

随机推荐

  1. shell编程笔记(基本部分)

    1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...

  2. 正式学习React (六) 项目篇

    https://github.com/huenchao/yingshili 或者点这里 注意事项看ReadME.md 会持续更新,反正就是把之前分析的redux react-redux都用一下,然后会 ...

  3. js中一些常用的基本函数

    如何使用jquery刷新当前页面下面介绍全页面刷新方法:有时候可能会用到window.location.reload()刷新当前页面.parent.location.reload()刷新父亲对象(用于 ...

  4. How to delete the icons of Win7 desktop shortcuts

    1. Copy the following bat code in txt type file, 2. save it as file extension type bat, run it as ad ...

  5. 新建Android项目的时候,选择SDK的区别

    选择新建一个Android项目时候,出现MiniMum Required SDK.Target SDK.Compile With.Theme,如下所示,分别是什么意思呢? MinMum Require ...

  6. OpenWRT交叉编译

    对于当前不在OpenWRT repository中的软件,如果是用源码形式发布的,那么可以用OpenWRT Buildroot进行交叉编译. 首先编译好Buildroot(一般编译过一次固件,就已经编 ...

  7. SD卡在单片机上的应用

    (1)SD卡的引脚定义:  SD卡SPI模式下与单片机的连接图: 注意:SPI模式时,这些信号需要在主机端用10~100K欧的电阻上拉.      SD卡支持两种总线方式:SD方式与SPI方式.    ...

  8. 关于httpHandlers、handlers和httpModules、modules的那些配置中的各种问题

    在web.config中配置httpHandlers.handlers和httpModules.modules根据服务器环境不同设置各有不同 在IIS6及IIS7.0以上的经典模式中配置httpMod ...

  9. magento产品导入时需要注意的事项

    (1) 必须保证csv文件是utf-8编码的.非utf-8的编码会导致产品导入失败 (2)产品图片 (a) 产品图片必须包含image,image_label,_media_image,_media_ ...

  10. 【精度问题】【HDU2899】Strange fuction

    Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...