精华内容
下载资源
问答
  • Android Framework

    2014-07-15 14:46:07
    对于Android Framework层的学习,在上一次的 Android框架层学习指导 中我们已经讲到了基础的结构和定义,但是对于Framework层的核心还有哪些呢?  1. 在Android源码的base中,我们可以看到每个目录进去,都会有...
     对于Android Framework层的学习,在上一次的 Android框架层学习指导 中我们已经讲到了基础的结构和定义,但是对于Framework层的核心还有哪些呢?

      1. 在Android源码的base中,我们可以看到每个目录进去,都会有java和jni两个文件夹,后者对于初入android框架的学习十分有帮助,如果你刚开始了解NDK和JNI相关的不妨读读Google的代码,这对于代码风格和质量的提高都很有帮助。

      2. 对于NDK和JNI来说,编译我们需要一个好的环境,这里还是推荐基于Unix架构的Linux或Mac OS编译,Android123推荐放弃Windows下的Cygwin和MingWin可以节省不少的时间,对于编译来说先掌握mk文件的结构比较重要,这里可以直接查看base目录中每个jni子目录的android.mk文件即可,在Linux下mk文件这种脚本方式对于过去一些Visual Studio用惯的可能感觉有些原始。

      3. 当然学习Android Framework可以帮助改进系统,定制自己的固件,部分核心的库是独立的external包,比如说 SQLite、Webkit、zlib、libpng这些Android使用第三方开源的库都是在platform/external/xxx.git 中。xxx代表最终的库名。

      4. 对于部分的核心库,上次我们在Android框架层学习指导一文中由于篇幅并没有提到,其实在base目录下面的native中可以看到很多系统结构的定义和实现。Android开发网推荐深入掌握Android这个namespace中的所有结构,这样的基础是十分必要的。
    展开全文
  • Android framework

    2014-06-16 14:59:18
    传统的Android系统只有一个framework-res.apk资源包,第三方厂商在进行rom定制时会直接修改framework res资源,达到美化目的。但是这种方式跟原生资源的耦合度过高,在系统迁移或者framework ui移植时需要进行人工...

    传统的Android系统只有一个framework-res.apk资源包,第三方厂商在进行rom定制时会直接修改framework res资源,达到美化目的。但是这种方式跟原生资源的耦合度过高,在系统迁移或者framework ui移植时需要进行人工merge,工作量巨大。通过为Android添加一个新的独立的资源包,可以将厂商定制资源独立出来,可移植、可维护性非常好。

    具体做法可以分为以下几个步骤:

    1. 修改build/core/clear_var.mk

    LOCAL_USE_LETV_FRAMEWORK_RES:= true

    2. 修改build/core/package.mk

    以下脚本可以加在 $(R_file_stamp): $(framework_res_package_export_deps) 之前,然后修改$(R_file_stamp): $(framework_res_package_export_deps) 和 $(LOCAL_INTERMEDIATE_TARGETS): \
        PRIVATE_AAPT_INCLUDES := $(framework_res_package_export)

    如下所示:

    ifeq ($(LOCAL_USE_LETV_FRAMEWORK_RES),true)
    letv_framework_res_package_export := \
            $(call intermediates-dir-for,APPS,letv-framework-res,,COMMON)/package-export.apk
    letv_framework_res_package_export_deps := \
            $(dir $(letv_framework_res_package_export))src/R.stamp
    else
    letv_framework_res_package_export :=
    letv_framework_res_package_export_deps :=
    endif # LOCAL_USE_LETV_FRAMEWORK_RES
    $(R_file_stamp): $(framework_res_package_export_deps) $(letv_framework_res_package_export_deps)
    $(LOCAL_INTERMEDIATE_TARGETS): \
        PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) \
        	$(letv_framework_res_package_export)
    endif # LOCAL_NO_STANDARD_LIBRARIES

    3. 修改build/target/product/core.mk

    在PRODUCT_PACKAGES增加letv-framework-res

    4. 添加一个新的资源包项目,这里在framework/base/core/res同级目录下建立一个新的文件夹letv_res用来存放我们的资源。把res目录下的AndroidManifest.xml和Android.mk拷贝过来,进行修改。 

    记得设置LOCAL_USE_MY_FRAMEWORK_RES为false。

    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE_TAGS := optional
    
    LOCAL_PACKAGE_NAME := letv-framework-res
    LOCAL_CERTIFICATE := platform
    
    # Set LOCAL_USE_LETV_FRAMEWORK_RES as false
    LOCAL_USE_LETV_FRAMEWORK_RES := false
    
    # Tell aapt to create "extending (non-application)" resource IDs,
    # since these resources will be used by many apps.
    LOCAL_AAPT_FLAGS := -x
    
    # Install this alongside the libraries.
    LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
    
    # Create package-export.apk, which other packages can use to get
    # PRODUCT-agnostic resource data like IDs and type definitions.
    LOCAL_EXPORT_PACKAGE_RESOURCES := true
    
    # Include resources generated by system RenderScript files.
    framework_GENERATED_SOURCE_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,framework,,COMMON)/src
    framework_RenderScript_STAMP_FILE := $(framework_GENERATED_SOURCE_DIR)/RenderScript.stamp
    #LOCAL_RESOURCE_DIR := $(framework_GENERATED_SOURCE_DIR)/renderscript/res $(LOCAL_PATH)/res
    
    include $(BUILD_PACKAGE)
    
    # Make sure the system .rs files get compiled before building the package-export.apk.
    #$(resource_export_package): $(framework_RenderScript_STAMP_FILE)
    
    # define a global intermediate target that other module may depend on.
    .PHONY: letv-framework-res-package-target
    letv-framework-res-package-target: $(LOCAL_BUILT_MODULE)
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="letv" coreApp="true" android:sharedUserId="android.uid.system"
        android:sharedUserLabel="@null">
    
        <application android:process="system"
                     android:persistent="true"
                     android:hasCode="false"
                     android:label="@null"
                     android:allowClearUserData="false"
                     android:killAfterRestore="false"
                     android:icon="@null">
    
        </application>
    
    </manifest>

    资源的放置跟res下的类似,记得values目录下创建public.xml,public.xml对id的类型区分比较严格,attr必须是0x0x010000开头,drawable必须是0x0x020000开头,其他类型好像就没有限制,直接依次0x0x030000、0x0x040000开始即可。否则,编译过程中会出现segmentation fault错误。

    <resources>
     <public type="attr" name="cForeground" id="0x03010000" />
     <public type="drawable" name="ic_filemanager" id="0x03020000" />
     <public type="style" name="LetvTheme" id="0x03030000" />
     <public type="string" name="letv" id="0x03040000" />
     <public type="dimen" name="letv_width" id="0x03050000" />
     <public type="layout" name="letv_text" id="0x03060000" />
    </resources>

    5.  以上只是解决了资源的编译环境问题,资源的查找过程也需要进行修改,修改
    AssetManager.java,在init()后添加代码 addAssetPath(“/system/framework/letv-framework-res.apk”);

    public AssetManager() {
            synchronized (this) {
                if (DEBUG_REFS) {
                    mNumRefs = 0;
                    incRefsLocked(this.hashCode());
                }
                init();
                addAssetPath("/system/framework/letv-framework-res.apk");
                if (localLOGV) Log.v(TAG, "New asset manager: " + this);
                ensureSystemAssets();
            }
        }

    6. 最后就是资源应用问题。应用程序在xml文件中引用letv-framework-res.apk中的资源时可以使用与原生资源类似的访问方式,首先声明letv xmlns :

    xmlns:letv="http://schemas.android.com/apk/res/letv"

    然后像@android:drawable @android:dimen这种引用方式改成@letv:drawable @letv:dimen即可。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:letv="http://schemas.android.com/apk/res/letv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:paddingTop="@letv:dimen/letv_width"
        android:orientation="horizontal" >
    
       <ImageView android:id="@+id/file_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginBottom="40dp"
                android:src="@letv:drawable/ic_filemanager" />
    
    </LinearLayout>
    
    
    
    
    

    在Android中怎么增加一个类似于framework.jar的SDK包

    其实,这是一件非常容易的事情。首先,你需要增加一个SDK的编译模块。然后,请修改build/core/dex_preopt.mk在DEXPREOPT_BOOT_JARS,build/core/java.mk中的LOCAL_JAVA_LIBRARIES,build/core/user_tags.mk的GRANDFATHERED_USER_MODULES,build/target/product/core.mk的PRODUCT_PACKAGES中增加my-framework.jar好了,搞定收工。最后,请修改你的init.rc(一般在/system/core/rootdir/)的export BOOTCLASSPATH,加上my-framework.jar
    展开全文
  • android framework

    千次阅读 2011-09-30 12:39:18
    framework 目录为框架层 代码,frameworkandroid四个层次中的第二层。 frameworks/ ├── base │ ├── Android.mk │ ├── api │ │ ├── 1.xml │ │
    framework 目录为框架层 代码,framework 为android四个层次中的第二层。




    frameworks/
    ├── base
    │   ├── Android.mk
    │   ├── api
    │   │   ├── 1.xml
    │   │   ├── 2.xml
    │   │   ├── 3.xml
    │   │   ├── 4.xml
    │   │   ├── 5.xml
    │   │   ├── 6.xml
    │   │   ├── 7.xml
    │   │   ├── 8.xml
    │   │   └── current.xml
    │   ├── awt
    │   │   ├── Android.mk
    │   │   ├── com
    │   │   │   └── android
    │   │   ├── java
    │   │   │   ├── awt
    │   │   │   └── beans
    │   │   ├── javax
    │   │   │   └── imageio
    │   │   ├── org
    │   │   │   └── apache
    │   │   └── resources
    │   │       └── org
    │   ├── build
    │   │   └── jarjar-rules.txt
    │   ├── camera
    │   │   ├── libcameraservice
    │   │   │   ├── Android.mk
    │   │   │   ├── CameraHardwareStub.cpp
    │   │   │   ├── CameraHardwareStub.h
    │   │   │   ├── CameraService.cpp
    │   │   │   ├── CameraService.h
    │   │   │   ├── CannedJpeg.h
    │   │   │   ├── FakeCamera.cpp
    │   │   │   └── FakeCamera.h
    │   │   └── tests
    │   │       └── CameraServiceTest
    │   ├── CleanSpec.mk
    │   ├── cmds
    │   │   ├── am
    │   │   │   ├── am
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── src
    │   │   ├── app_process
    │   │   │   ├── Android.mk
    │   │   │   ├── app_main.cpp
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   └── NOTICE
    │   │   ├── backup
    │   │   │   ├── Android.mk
    │   │   │   ├── backup.cpp
    │   │   │   └── NOTICE
    │   │   ├── bmgr
    │   │   │   ├── Android.mk
    │   │   │   ├── bmgr
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── src
    │   │   ├── bootanimation
    │   │   │   ├── Android.mk
    │   │   │   ├── BootAnimation.cpp
    │   │   │   ├── BootAnimation.h
    │   │   │   └── bootanimation_main.cpp
    │   │   ├── bugreport
    │   │   │   ├── Android.mk
    │   │   │   └── bugreport.c
    │   │   ├── dumpstate
    │   │   │   ├── Android.mk
    │   │   │   ├── dumpstate.c
    │   │   │   ├── dumpstate.h
    │   │   │   └── utils.c
    │   │   ├── dumpsys
    │   │   │   ├── Android.mk
    │   │   │   ├── dumpsys.cpp
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   └── NOTICE
    │   │   ├── ime
    │   │   │   ├── Android.mk
    │   │   │   ├── ime
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── src
    │   │   ├── input
    │   │   │   ├── Android.mk
    │   │   │   ├── input
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── src
    │   │   ├── installd
    │   │   │   ├── Android.mk
    │   │   │   ├── commands.c
    │   │   │   ├── installd.c
    │   │   │   ├── installd.h
    │   │   │   └── utils.c
    │   │   ├── keystore
    │   │   │   ├── Android.mk
    │   │   │   ├── keystore.c
    │   │   │   ├── keystore_cli.c
    │   │   │   ├── keystore_get.h
    │   │   │   └── keystore.h
    │   │   ├── pm
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── pm
    │   │   │   └── src
    │   │   ├── rawbu
    │   │   │   ├── Android.mk
    │   │   │   ├── backup.cpp
    │   │   │   └── NOTICE
    │   │   ├── runtime
    │   │   │   ├── Android.mk
    │   │   │   ├── main_runtime.cpp
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── ServiceManager.cpp
    │   │   │   ├── ServiceManager.h
    │   │   │   ├── SignalHandler.cpp
    │   │   │   └── SignalHandler.h
    │   │   ├── service
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── service.cpp
    │   │   ├── servicemanager
    │   │   │   ├── Android.mk
    │   │   │   ├── bctest.c
    │   │   │   ├── binder.c
    │   │   │   ├── binder.h
    │   │   │   └── service_manager.c
    │   │   ├── stagefright
    │   │   │   ├── Android.mk
    │   │   │   ├── audioloop.cpp
    │   │   │   ├── record.cpp
    │   │   │   ├── SineSource.cpp
    │   │   │   ├── SineSource.h
    │   │   │   ├── stagefright.cpp
    │   │   │   └── WaveWriter.h
    │   │   ├── surfaceflinger
    │   │   │   ├── Android.mk
    │   │   │   └── main_surfaceflinger.cpp
    │   │   ├── svc
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── src
    │   │   │   └── svc
    │   │   └── system_server
    │   │       ├── Android.mk
    │   │       ├── library
    │   │       ├── MODULE_LICENSE_APACHE2
    │   │       ├── NOTICE
    │   │       └── system_main.cpp
    │   ├── core
    │   │   ├── config
    │   │   │   ├── debug
    │   │   │   ├── ndebug
    │   │   │   ├── README.txt
    │   │   │   └── sdk
    │   │   ├── java
    │   │   │   ├── android
    │   │   │   ├── com
    │   │   │   ├── jarjar-rules.txt
    │   │   │   └── overview.html
    │   │   ├── jni
    │   │   │   ├── ActivityManager.cpp
    │   │   │   ├── android
    │   │   │   ├── android_backup_BackupDataInput.cpp
    │   │   │   ├── android_backup_BackupDataOutput.cpp
    │   │   │   ├── android_backup_BackupHelperDispatcher.cpp
    │   │   │   ├── android_backup_FileBackupHelperBase.cpp
    │   │   │   ├── android_bluetooth_BluetoothAudioGateway.cpp
    │   │   │   ├── android_bluetooth_BluetoothSocket.cpp
    │   │   │   ├── android_bluetooth_common.cpp
    │   │   │   ├── android_bluetooth_common.h
    │   │   │   ├── android_bluetooth_HeadsetBase.cpp
    │   │   │   ├── android_bluetooth_ScoSocket.cpp
    │   │   │   ├── android_database_CursorWindow.cpp
    │   │   │   ├── android_database_SQLiteCompiledSql.cpp
    │   │   │   ├── android_database_SQLiteDatabase.cpp
    │   │   │   ├── android_database_SQLiteDebug.cpp
    │   │   │   ├── android_database_SQLiteProgram.cpp
    │   │   │   ├── android_database_SQLiteQuery.cpp
    │   │   │   ├── android_database_SQLiteStatement.cpp
    │   │   │   ├── android_ddm_DdmHandleNativeHeap.cpp
    │   │   │   ├── android_debug_JNITest.cpp
    │   │   │   ├── android_emoji_EmojiFactory.cpp
    │   │   │   ├── android_graphics_PixelFormat.cpp
    │   │   │   ├── android_hardware_Camera.cpp
    │   │   │   ├── android_hardware_SensorManager.cpp
    │   │   │   ├── android_location_GpsLocationProvider.cpp
    │   │   │   ├── android_media_AudioRecord.cpp
    │   │   │   ├── android_media_AudioSystem.cpp
    │   │   │   ├── android_media_AudioTrack.cpp
    │   │   │   ├── android_media_JetPlayer.cpp
    │   │   │   ├── android_media_ToneGenerator.cpp
    │   │   │   ├── android_message_digest_sha1.cpp
    │   │   │   ├── Android.mk
    │   │   │   ├── android_net_ethernet.cpp
    │   │   │   ├── android_net_LocalSocketImpl.cpp
    │   │   │   ├── android_net_NetUtils.cpp
    │   │   │   ├── android_net_TrafficStats.cpp
    │   │   │   ├── android_net_wifi_Wifi.cpp
    │   │   │   ├── android_nio_utils.cpp
    │   │   │   ├── android_nio_utils.h
    │   │   │   ├── android_opengl_GLES10.cpp
    │   │   │   ├── android_opengl_GLES10Ext.cpp
    │   │   │   ├── android_opengl_GLES11.cpp
    │   │   │   ├── android_opengl_GLES11Ext.cpp
    │   │   │   ├── android_opengl_GLES20.cpp
    │   │   │   ├── android_os_Debug.cpp
    │   │   │   ├── android_os_FileUtils.cpp
    │   │   │   ├── android_os_MemoryFile.cpp
    │   │   │   ├── android_os_ParcelFileDescriptor.cpp
    │   │   │   ├── android_os_Power.cpp
    │   │   │   ├── android_os_StatFs.cpp
    │   │   │   ├── android_os_SystemClock.cpp
    │   │   │   ├── android_os_SystemProperties.cpp
    │   │   │   ├── android_os_UEventObserver.cpp
    │   │   │   ├── android_pim_EventRecurrence.cpp
    │   │   │   ├── AndroidRuntime.cpp
    │   │   │   ├── android_security_Md5MessageDigest.cpp
    │   │   │   ├── android_server_BluetoothA2dpService.cpp
    │   │   │   ├── android_server_BluetoothEventLoop.cpp
    │   │   │   ├── android_server_BluetoothHidService.cpp
    │   │   │   ├── android_server_BluetoothService.cpp
    │   │   │   ├── android_server_Watchdog.cpp
    │   │   │   ├── android_text_AndroidBidi.cpp
    │   │   │   ├── android_text_AndroidCharacter.cpp
    │   │   │   ├── android_text_format_Time.cpp
    │   │   │   ├── android_text_KeyCharacterMap.cpp
    │   │   │   ├── android_util_AssetManager.cpp
    │   │   │   ├── android_util_Binder.cpp
    │   │   │   ├── android_util_Binder.h
    │   │   │   ├── android_util_EventLog.cpp
    │   │   │   ├── android_util_FileObserver.cpp
    │   │   │   ├── android_util_FloatMath.cpp
    │   │   │   ├── android_util_Log.cpp
    │   │   │   ├── android_util_Process.cpp
    │   │   │   ├── android_util_StringBlock.cpp
    │   │   │   ├── android_util_XmlBlock.cpp
    │   │   │   ├── android_view_Display.cpp
    │   │   │   ├── android_view_Surface.cpp
    │   │   │   ├── android_view_ViewRoot.cpp
    │   │   │   ├── BindTest.cpp
    │   │   │   ├── com_android_internal_graphics_NativeUtils.cpp
    │   │   │   ├── com_android_internal_os_ZygoteInit.cpp
    │   │   │   ├── com_google_android_gles_jni_EGLImpl.cpp
    │   │   │   ├── com_google_android_gles_jni_GLImpl.cpp
    │   │   │   ├── CursorWindow.cpp
    │   │   │   ├── CursorWindow.h
    │   │   │   ├── GraphicsExternGlue.h
    │   │   │   ├── GraphicsRegisterGlue.h
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── sqlite3_exception.h
    │   │   │   ├── Time.cpp
    │   │   │   └── TimeUtils.h
    │   │   ├── res
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── assets
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── res
    │   │   └── tests
    │   │       ├── ConnectivityManagerTest
    │   │       ├── coretests
    │   │       └── hosttests
    │   ├── data
    │   │   ├── etc
    │   │   │   ├── android.hardware.camera.autofocus.xml
    │   │   │   ├── android.hardware.camera.flash-autofocus.xml
    │   │   │   ├── android.hardware.camera.xml
    │   │   │   ├── android.hardware.location.gps.xml
    │   │   │   ├── android.hardware.location.xml
    │   │   │   ├── android.hardware.sensor.accelerometer.xml
    │   │   │   ├── android.hardware.sensor.compass.xml
    │   │   │   ├── android.hardware.sensor.light.xml
    │   │   │   ├── android.hardware.sensor.proximity.xml
    │   │   │   ├── android.hardware.telephony.cdma.xml
    │   │   │   ├── android.hardware.telephony.gsm.xml
    │   │   │   ├── android.hardware.touchscreen.multitouch.distinct.xml
    │   │   │   ├── android.hardware.touchscreen.multitouch.xml
    │   │   │   ├── android.hardware.touchscreen.xml
    │   │   │   ├── android.hardware.wifi.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── handheld_core_hardware.xml
    │   │   │   └── platform.xml
    │   │   ├── fonts
    │   │   │   ├── Ahem.ttf
    │   │   │   ├── Android.mk
    │   │   │   ├── Clockopia.ttf
    │   │   │   ├── DroidSansArabic.ttf
    │   │   │   ├── DroidSans-Bold.ttf
    │   │   │   ├── DroidSansFallbackLegacy.ttf
    │   │   │   ├── DroidSansFallback.ttf
    │   │   │   ├── DroidSansHebrew.ttf
    │   │   │   ├── DroidSansJapanese.ttf
    │   │   │   ├── DroidSansMono.ttf
    │   │   │   ├── DroidSansThai.ttf
    │   │   │   ├── DroidSans.ttf
    │   │   │   ├── DroidSerif-BoldItalic.ttf
    │   │   │   ├── DroidSerif-Bold.ttf
    │   │   │   ├── DroidSerif-Italic.ttf
    │   │   │   ├── DroidSerif-Regular.ttf
    │   │   │   ├── fonts.xml
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── README.txt
    │   │   └── sounds
    │   │       ├── Alarm_Beep_01.ogg
    │   │       ├── Alarm_Beep_02.ogg
    │   │       ├── Alarm_Beep_03.ogg
    │   │       ├── Alarm_Buzzer.ogg
    │   │       ├── Alarm_Classic.ogg
    │   │       ├── Alarm_Rooster_01.ogg
    │   │       ├── Alarm_Rooster_02.ogg
    │   │       ├── AudioPackage2.mk
    │   │       ├── AudioPackage3.mk
    │   │       ├── AudioPackage4.mk
    │   │       ├── effects
    │   │       ├── F1_MissedCall.ogg
    │   │       ├── F1_New_MMS.ogg
    │   │       ├── F1_New_SMS.ogg
    │   │       ├── F1_NewVoicemail.ogg
    │   │       ├── newwavelabs
    │   │       ├── notifications
    │   │       ├── OriginalAudio.mk
    │   │       ├── ring3.ogg
    │   │       ├── Ring_Classic_01.ogg
    │   │       ├── Ring_Classic_02.ogg
    │   │       ├── Ring_Classic_03.ogg
    │   │       ├── Ring_Classic_04.ogg
    │   │       ├── Ring_Classic_05.ogg
    │   │       ├── Ring_Digital_01.ogg
    │   │       ├── Ring_Digital_02.ogg
    │   │       ├── Ring_Digital_03.ogg
    │   │       ├── Ring_Digital_04.ogg
    │   │       ├── Ring_Digital_05.ogg
    │   │       ├── ringer.ogg
    │   │       ├── Ring_Synth_01.ogg
    │   │       ├── Ring_Synth_02.ogg
    │   │       ├── Ring_Synth_03.ogg
    │   │       ├── Ring_Synth_04.ogg
    │   │       ├── Ring_Synth_05.ogg
    │   │       ├── ringtones
    │   │       └── testfiles
    │   ├── docs
    │   │   ├── docs-documentation-redirect.html
    │   │   ├── docs-redirect.html
    │   │   ├── docs-redirect-index.html
    │   │   ├── docs-samples-redirect.html
    │   │   ├── html
    │   │   │   ├── app.yaml
    │   │   │   ├── community
    │   │   │   ├── favicon.ico
    │   │   │   ├── googleb38c1d60b7ba5d19.html
    │   │   │   ├── guide
    │   │   │   ├── images
    │   │   │   ├── index.jd
    │   │   │   ├── intl
    │   │   │   ├── license.jd
    │   │   │   ├── mwc2010
    │   │   │   ├── offline.jd
    │   │   │   ├── reference
    │   │   │   ├── resources
    │   │   │   ├── robots.txt
    │   │   │   ├── sdk
    │   │   │   ├── search.jd
    │   │   │   ├── security_at_android_dot_com.txt
    │   │   │   ├── shareables
    │   │   │   ├── sitemap-intl.txt
    │   │   │   ├── sitemap.txt
    │   │   │   └── videos
    │   │   └── overview-ext.html
    │   ├── ethernet
    │   │   └── java
    │   │       └── android
    │   ├── graphics
    │   │   ├── java
    │   │   │   ├── android
    │   │   │   └── com
    │   │   ├── jni
    │   │   │   ├── Android.mk
    │   │   │   └── android_renderscript_RenderScript.cpp
    │   │   └── tests
    │   │       └── graphicstests
    │   ├── include
    │   │   ├── android_runtime
    │   │   │   ├── ActivityManager.h
    │   │   │   ├── AndroidRuntime.h
    │   │   │   └── android_util_AssetManager.h
    │   │   ├── binder
    │   │   │   ├── Binder.h
    │   │   │   ├── BpBinder.h
    │   │   │   ├── IBinder.h
    │   │   │   ├── IInterface.h
    │   │   │   ├── IMemory.h
    │   │   │   ├── IPCThreadState.h
    │   │   │   ├── IPermissionController.h
    │   │   │   ├── IServiceManager.h
    │   │   │   ├── MemoryBase.h
    │   │   │   ├── MemoryDealer.h
    │   │   │   ├── MemoryHeapBase.h
    │   │   │   ├── MemoryHeapPmem.h
    │   │   │   ├── Parcel.h
    │   │   │   ├── Permission.h
    │   │   │   └── ProcessState.h
    │   │   ├── camera
    │   │   │   ├── Camera.h
    │   │   │   ├── CameraHardwareInterface.h
    │   │   │   ├── CameraParameters.h
    │   │   │   ├── ICameraClient.h
    │   │   │   ├── ICamera.h
    │   │   │   └── ICameraService.h
    │   │   ├── media
    │   │   │   ├── AudioRecord.h
    │   │   │   ├── AudioSystem.h
    │   │   │   ├── AudioTrack.h
    │   │   │   ├── IAudioFlingerClient.h
    │   │   │   ├── IAudioFlinger.h
    │   │   │   ├── IAudioPolicyService.h
    │   │   │   ├── IAudioRecord.h
    │   │   │   ├── IAudioTrack.h
    │   │   │   ├── IMediaDeathNotifier.h
    │   │   │   ├── IMediaMetadataRetriever.h
    │   │   │   ├── IMediaPlayerClient.h
    │   │   │   ├── IMediaPlayer.h
    │   │   │   ├── IMediaPlayerService.h
    │   │   │   ├── IMediaRecorder.h
    │   │   │   ├── IOMX.h
    │   │   │   ├── JetPlayer.h
    │   │   │   ├── mediametadataretriever.h
    │   │   │   ├── MediaMetadataRetrieverInterface.h
    │   │   │   ├── mediaplayer.h
    │   │   │   ├── MediaPlayerInterface.h
    │   │   │   ├── MediaProfiles.h
    │   │   │   ├── MediaRecorderBase.h
    │   │   │   ├── mediarecorder.h
    │   │   │   ├── mediascanner.h
    │   │   │   ├── Metadata.h
    │   │   │   ├── PVMediaRecorder.h
    │   │   │   ├── PVMetadataRetriever.h
    │   │   │   ├── PVPlayer.h
    │   │   │   ├── stagefright
    │   │   │   ├── thread_init.h
    │   │   │   └── ToneGenerator.h
    │   │   ├── pim
    │   │   │   └── EventRecurrence.h
    │   │   ├── private
    │   │   │   ├── binder
    │   │   │   ├── media
    │   │   │   ├── opengles
    │   │   │   ├── surfaceflinger
    │   │   │   ├── ui
    │   │   │   └── utils
    │   │   ├── surfaceflinger
    │   │   │   ├── ISurfaceComposer.h
    │   │   │   ├── ISurfaceFlingerClient.h
    │   │   │   ├── ISurface.h
    │   │   │   ├── SurfaceComposerClient.h
    │   │   │   └── Surface.h
    │   │   ├── tts
    │   │   │   └── TtsEngine.h
    │   │   ├── ui
    │   │   │   ├── android_native_buffer.h
    │   │   │   ├── DisplayInfo.h
    │   │   │   ├── egl
    │   │   │   ├── EGLNativeSurface.h
    │   │   │   ├── EGLUtils.h
    │   │   │   ├── EventHub.h
    │   │   │   ├── FramebufferNativeWindow.h
    │   │   │   ├── GraphicBufferAllocator.h
    │   │   │   ├── GraphicBuffer.h
    │   │   │   ├── GraphicBufferMapper.h
    │   │   │   ├── IOverlay.h
    │   │   │   ├── KeyCharacterMap.h
    │   │   │   ├── KeycodeLabels.h
    │   │   │   ├── Overlay.h
    │   │   │   ├── PixelFormat.h
    │   │   │   ├── Point.h
    │   │   │   ├── Rect.h
    │   │   │   └── Region.h
    │   │   └── utils
    │   │       ├── ashmem.h
    │   │       ├── AssetDir.h
    │   │       ├── Asset.h
    │   │       ├── AssetManager.h
    │   │       ├── Atomic.h
    │   │       ├── BackupHelpers.h
    │   │       ├── BufferedTextOutput.h
    │   │       ├── Buffer.h
    │   │       ├── ByteOrder.h
    │   │       ├── CallStack.h
    │   │       ├── Debug.h
    │   │       ├── Endian.h
    │   │       ├── Errors.h
    │   │       ├── FileMap.h
    │   │       ├── Flattenable.h
    │   │       ├── KeyedVector.h
    │   │       ├── List.h
    │   │       ├── Log.h
    │   │       ├── misc.h
    │   │       ├── RefBase.h
    │   │       ├── ResourceTypes.h
    │   │       ├── SharedBuffer.h
    │   │       ├── Singleton.h
    │   │       ├── SortedVector.h
    │   │       ├── StopWatch.h
    │   │       ├── String16.h
    │   │       ├── String8.h
    │   │       ├── StringArray.h
    │   │       ├── SystemClock.h
    │   │       ├── TextOutput.h
    │   │       ├── threads.h
    │   │       ├── Timers.h
    │   │       ├── TypeHelpers.h
    │   │       ├── Vector.h
    │   │       ├── VectorImpl.h
    │   │       ├── ZipFileCRO.h
    │   │       ├── ZipFileRO.h
    │   │       └── ZipUtils.h
    │   ├── keystore
    │   │   ├── java
    │   │   │   └── android
    │   │   ├── MODULE_LICENSE_APACHE2
    │   │   ├── NOTICE
    │   │   └── tests
    │   │       ├── AndroidManifest.xml
    │   │       ├── Android.mk
    │   │       └── src
    │   ├── libs
    │   │   ├── audioflinger
    │   │   │   ├── A2dpAudioInterface.cpp
    │   │   │   ├── A2dpAudioInterface.h
    │   │   │   ├── Android.mk
    │   │   │   ├── AudioBufferProvider.h
    │   │   │   ├── AudioDumpInterface.cpp
    │   │   │   ├── AudioDumpInterface.h
    │   │   │   ├── AudioFlinger.cpp
    │   │   │   ├── AudioFlinger.h
    │   │   │   ├── AudioHardwareGeneric.cpp
    │   │   │   ├── AudioHardwareGeneric.h
    │   │   │   ├── AudioHardwareInterface.cpp
    │   │   │   ├── AudioHardwareStub.cpp
    │   │   │   ├── AudioHardwareStub.h
    │   │   │   ├── AudioMixer.cpp
    │   │   │   ├── AudioMixer.h
    │   │   │   ├── AudioPolicyManagerBase.cpp
    │   │   │   ├── AudioPolicyService.cpp
    │   │   │   ├── AudioPolicyService.h
    │   │   │   ├── AudioResampler.cpp
    │   │   │   ├── AudioResamplerCubic.cpp
    │   │   │   ├── AudioResamplerCubic.h
    │   │   │   ├── AudioResampler.h
    │   │   │   ├── AudioResamplerSinc.cpp
    │   │   │   └── AudioResamplerSinc.h
    │   │   ├── binder
    │   │   │   ├── Android.mk
    │   │   │   ├── Binder.cpp
    │   │   │   ├── BpBinder.cpp
    │   │   │   ├── IInterface.cpp
    │   │   │   ├── IMemory.cpp
    │   │   │   ├── IPCThreadState.cpp
    │   │   │   ├── IPermissionController.cpp
    │   │   │   ├── IServiceManager.cpp
    │   │   │   ├── MemoryBase.cpp
    │   │   │   ├── MemoryDealer.cpp
    │   │   │   ├── MemoryHeapBase.cpp
    │   │   │   ├── MemoryHeapPmem.cpp
    │   │   │   ├── Parcel.cpp
    │   │   │   ├── Permission.cpp
    │   │   │   ├── ProcessState.cpp
    │   │   │   └── Static.cpp
    │   │   ├── camera
    │   │   │   ├── Android.mk
    │   │   │   ├── Camera.cpp
    │   │   │   ├── CameraParameters.cpp
    │   │   │   ├── ICameraClient.cpp
    │   │   │   ├── ICamera.cpp
    │   │   │   └── ICameraService.cpp
    │   │   ├── rs
    │   │   │   ├── Android.mk
    │   │   │   ├── java
    │   │   │   ├── RenderScriptEnv.h
    │   │   │   ├── RenderScript.h
    │   │   │   ├── rsAdapter.cpp
    │   │   │   ├── rsAdapter.h
    │   │   │   ├── rsAllocation.cpp
    │   │   │   ├── rsAllocation.h
    │   │   │   ├── rsComponent.cpp
    │   │   │   ├── rsComponent.h
    │   │   │   ├── rsContext.cpp
    │   │   │   ├── rsContext.h
    │   │   │   ├── rsDevice.cpp
    │   │   │   ├── rsDevice.h
    │   │   │   ├── rsElement.cpp
    │   │   │   ├── rsElement.h
    │   │   │   ├── rsFileA3D.cpp
    │   │   │   ├── rsFileA3DDecls.h
    │   │   │   ├── rsFileA3D.h
    │   │   │   ├── rsgApi.cpp.rsg
    │   │   │   ├── rsgApiFuncDecl.h.rsg
    │   │   │   ├── rsgApiReplay.cpp.rsg
    │   │   │   ├── rsgApiStructs.h.rsg
    │   │   │   ├── rsg_generator.c
    │   │   │   ├── rsg_ScriptJavaClass.cpp
    │   │   │   ├── rsHandcode.h
    │   │   │   ├── rsLight.cpp
    │   │   │   ├── rsLight.h
    │   │   │   ├── rsLocklessFifo.cpp
    │   │   │   ├── rsLocklessFifo.h
    │   │   │   ├── rsMatrix.cpp
    │   │   │   ├── rsMatrix.h
    │   │   │   ├── rsMesh.cpp
    │   │   │   ├── rsMesh.h
    │   │   │   ├── rsNoise.cpp
    │   │   │   ├── rsNoise.h
    │   │   │   ├── rsObjectBase.cpp
    │   │   │   ├── rsObjectBase.h
    │   │   │   ├── rsProgram.cpp
    │   │   │   ├── rsProgramFragment.cpp
    │   │   │   ├── rsProgramFragment.h
    │   │   │   ├── rsProgramFragmentStore.cpp
    │   │   │   ├── rsProgramFragmentStore.h
    │   │   │   ├── rsProgram.h
    │   │   │   ├── rsProgramRaster.cpp
    │   │   │   ├── rsProgramRaster.h
    │   │   │   ├── rsProgramVertex.cpp
    │   │   │   ├── rsProgramVertex.h
    │   │   │   ├── rsSampler.cpp
    │   │   │   ├── rsSampler.h
    │   │   │   ├── rsScriptC.cpp
    │   │   │   ├── rsScriptC.h
    │   │   │   ├── rsScriptC_Lib.cpp
    │   │   │   ├── rsScript.cpp
    │   │   │   ├── rsScript.h
    │   │   │   ├── rsShaderCache.cpp
    │   │   │   ├── rsShaderCache.h
    │   │   │   ├── rsSimpleMesh.cpp
    │   │   │   ├── rsSimpleMesh.h
    │   │   │   ├── rs.spec
    │   │   │   ├── rsThreadIO.cpp
    │   │   │   ├── rsThreadIO.h
    │   │   │   ├── rsType.cpp
    │   │   │   ├── rsType.h
    │   │   │   ├── rsUtils.h
    │   │   │   ├── rsVertexArray.cpp
    │   │   │   ├── rsVertexArray.h
    │   │   │   ├── scriptc
    │   │   │   ├── spec.h
    │   │   │   └── spec.l
    │   │   ├── surfaceflinger
    │   │   │   ├── Android.mk
    │   │   │   ├── Barrier.h
    │   │   │   ├── BlurFilter.cpp
    │   │   │   ├── BlurFilter.h
    │   │   │   ├── clz.cpp
    │   │   │   ├── clz.h
    │   │   │   ├── DisplayHardware
    │   │   │   ├── LayerBase.cpp
    │   │   │   ├── LayerBase.h
    │   │   │   ├── LayerBlur.cpp
    │   │   │   ├── LayerBlur.h
    │   │   │   ├── LayerBuffer.cpp
    │   │   │   ├── LayerBuffer.h
    │   │   │   ├── Layer.cpp
    │   │   │   ├── LayerDim.cpp
    │   │   │   ├── LayerDim.h
    │   │   │   ├── Layer.h
    │   │   │   ├── MessageQueue.cpp
    │   │   │   ├── MessageQueue.h
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── SurfaceFlinger.cpp
    │   │   │   ├── SurfaceFlinger.h
    │   │   │   ├── tests
    │   │   │   ├── Tokenizer.cpp
    │   │   │   ├── Tokenizer.h
    │   │   │   ├── Transform.cpp
    │   │   │   └── Transform.h
    │   │   ├── surfaceflinger_client
    │   │   │   ├── Android.mk
    │   │   │   ├── ISurfaceComposer.cpp
    │   │   │   ├── ISurface.cpp
    │   │   │   ├── ISurfaceFlingerClient.cpp
    │   │   │   ├── LayerState.cpp
    │   │   │   ├── SharedBufferStack.cpp
    │   │   │   ├── SurfaceComposerClient.cpp
    │   │   │   └── Surface.cpp
    │   │   ├── ui
    │   │   │   ├── Android.mk
    │   │   │   ├── EGLUtils.cpp
    │   │   │   ├── EventHub.cpp
    │   │   │   ├── EventRecurrence.cpp
    │   │   │   ├── FramebufferNativeWindow.cpp
    │   │   │   ├── GraphicBufferAllocator.cpp
    │   │   │   ├── GraphicBuffer.cpp
    │   │   │   ├── GraphicBufferMapper.cpp
    │   │   │   ├── IOverlay.cpp
    │   │   │   ├── KeyCharacterMap.cpp
    │   │   │   ├── KeyLayoutMap.cpp
    │   │   │   ├── KeyLayoutMap.h
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── Overlay.cpp
    │   │   │   ├── PixelFormat.cpp
    │   │   │   ├── Rect.cpp
    │   │   │   ├── Region.cpp
    │   │   │   └── tests
    │   │   └── utils
    │   │       ├── Android.mk
    │   │       ├── Asset.cpp
    │   │       ├── AssetDir.cpp
    │   │       ├── AssetManager.cpp
    │   │       ├── BackupData.cpp
    │   │       ├── BackupHelpers.cpp
    │   │       ├── BufferedTextOutput.cpp
    │   │       ├── CallStack.cpp
    │   │       ├── Debug.cpp
    │   │       ├── FileMap.cpp
    │   │       ├── Flattenable.cpp
    │   │       ├── misc.cpp
    │   │       ├── MODULE_LICENSE_APACHE2
    │   │       ├── NOTICE
    │   │       ├── README
    │   │       ├── RefBase.cpp
    │   │       ├── ResourceTypes.cpp
    │   │       ├── SharedBuffer.cpp
    │   │       ├── Static.cpp
    │   │       ├── StopWatch.cpp
    │   │       ├── String16.cpp
    │   │       ├── String8.cpp
    │   │       ├── StringArray.cpp
    │   │       ├── SystemClock.cpp
    │   │       ├── TextOutput.cpp
    │   │       ├── Threads.cpp
    │   │       ├── Timers.cpp
    │   │       ├── VectorImpl.cpp
    │   │       ├── ZipFileCRO.cpp
    │   │       ├── ZipFileRO.cpp
    │   │       └── ZipUtils.cpp
    │   ├── location
    │   │   ├── java
    │   │   │   ├── android
    │   │   │   └── com
    │   │   └── tests
    │   │       └── locationtests
    │   ├── media
    │   │   ├── java
    │   │   │   └── android
    │   │   ├── jni
    │   │   │   ├── android_media_AmrInputStream.cpp
    │   │   │   ├── android_media_MediaMetadataRetriever.cpp
    │   │   │   ├── android_media_MediaPlayer.cpp
    │   │   │   ├── android_media_MediaProfiles.cpp
    │   │   │   ├── android_media_MediaRecorder.cpp
    │   │   │   ├── android_media_MediaScanner.cpp
    │   │   │   ├── android_media_ResampleInputStream.cpp
    │   │   │   ├── android_media_subtitle.cpp
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── soundpool
    │   │   ├── libdrm
    │   │   │   ├── Android.mk
    │   │   │   ├── mobile1
    │   │   │   ├── mobile2
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   └── NOTICE
    │   │   ├── libmedia
    │   │   │   ├── Android.mk
    │   │   │   ├── AudioRecord.cpp
    │   │   │   ├── AudioSystem.cpp
    │   │   │   ├── AudioTrack.cpp
    │   │   │   ├── autodetect.cpp
    │   │   │   ├── autodetect.h
    │   │   │   ├── IAudioFlingerClient.cpp
    │   │   │   ├── IAudioFlinger.cpp
    │   │   │   ├── IAudioPolicyService.cpp
    │   │   │   ├── IAudioRecord.cpp
    │   │   │   ├── IAudioTrack.cpp
    │   │   │   ├── IMediaDeathNotifier.cpp
    │   │   │   ├── IMediaMetadataRetriever.cpp
    │   │   │   ├── IMediaPlayerClient.cpp
    │   │   │   ├── IMediaPlayer.cpp
    │   │   │   ├── IMediaPlayerService.cpp
    │   │   │   ├── IMediaRecorder.cpp
    │   │   │   ├── IOMX.cpp
    │   │   │   ├── JetPlayer.cpp
    │   │   │   ├── mediametadataretriever.cpp
    │   │   │   ├── mediaplayer.cpp
    │   │   │   ├── MediaProfiles.cpp
    │   │   │   ├── mediarecorder.cpp
    │   │   │   ├── MediaScannerClient.cpp
    │   │   │   ├── MediaScanner.cpp
    │   │   │   ├── Metadata.cpp
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   └── ToneGenerator.cpp
    │   │   ├── libmediaplayerservice
    │   │   │   ├── Android.mk
    │   │   │   ├── MediaPlayerService.cpp
    │   │   │   ├── MediaPlayerService.h
    │   │   │   ├── MediaRecorderClient.cpp
    │   │   │   ├── MediaRecorderClient.h
    │   │   │   ├── MetadataRetrieverClient.cpp
    │   │   │   ├── MetadataRetrieverClient.h
    │   │   │   ├── MidiFile.cpp
    │   │   │   ├── MidiFile.h
    │   │   │   ├── MidiMetadataRetriever.cpp
    │   │   │   ├── MidiMetadataRetriever.h
    │   │   │   ├── StagefrightPlayer.cpp
    │   │   │   ├── StagefrightPlayer.h
    │   │   │   ├── StagefrightRecorder.cpp
    │   │   │   ├── StagefrightRecorder.h
    │   │   │   ├── TestPlayerStub.cpp
    │   │   │   ├── TestPlayerStub.h
    │   │   │   ├── VorbisMetadataRetriever.cpp
    │   │   │   ├── VorbisMetadataRetriever.h
    │   │   │   ├── VorbisPlayer.cpp
    │   │   │   └── VorbisPlayer.h
    │   │   ├── libstagefright
    │   │   │   ├── AMRExtractor.cpp
    │   │   │   ├── AMRWriter.cpp
    │   │   │   ├── Android.mk
    │   │   │   ├── AudioPlayer.cpp
    │   │   │   ├── AudioSource.cpp
    │   │   │   ├── avc_utils.cpp
    │   │   │   ├── AwesomePlayer.cpp
    │   │   │   ├── CachingDataSource.cpp
    │   │   │   ├── CameraSource.cpp
    │   │   │   ├── codecs
    │   │   │   ├── colorconversion
    │   │   │   ├── DataSource.cpp
    │   │   │   ├── ESDS.cpp
    │   │   │   ├── FileSource.cpp
    │   │   │   ├── foundation
    │   │   │   ├── HTTPDataSource.cpp
    │   │   │   ├── HTTPStream.cpp
    │   │   │   ├── id3
    │   │   │   ├── include
    │   │   │   ├── JPEGSource.cpp
    │   │   │   ├── matroska
    │   │   │   ├── MediaBuffer.cpp
    │   │   │   ├── MediaBufferGroup.cpp
    │   │   │   ├── MediaDefs.cpp
    │   │   │   ├── MediaExtractor.cpp
    │   │   │   ├── MediaSource.cpp
    │   │   │   ├── MetaData.cpp
    │   │   │   ├── MP3Extractor.cpp
    │   │   │   ├── MPEG4Extractor.cpp
    │   │   │   ├── MPEG4Writer.cpp
    │   │   │   ├── OggExtractor.cpp
    │   │   │   ├── omx
    │   │   │   ├── OMXClient.cpp
    │   │   │   ├── OMXCodec.cpp
    │   │   │   ├── Prefetcher.cpp
    │   │   │   ├── rtsp
    │   │   │   ├── SampleIterator.cpp
    │   │   │   ├── SampleTable.cpp
    │   │   │   ├── ShoutcastSource.cpp
    │   │   │   ├── StagefrightMediaScanner.cpp
    │   │   │   ├── StagefrightMetadataRetriever.cpp
    │   │   │   ├── string.cpp
    │   │   │   ├── TimedEventQueue.cpp
    │   │   │   ├── TimeSource.cpp
    │   │   │   ├── Utils.cpp
    │   │   │   └── WAVExtractor.cpp
    │   │   ├── libsubtitle
    │   │   │   ├── Android.mk
    │   │   │   ├── include
    │   │   │   └── src
    │   │   ├── mediaserver
    │   │   │   ├── Android.mk
    │   │   │   └── main_mediaserver.cpp
    │   │   └── tests
    │   │       ├── MediaFrameworkTest
    │   │       ├── omxjpegdecoder
    │   │       ├── players
    │   │       ├── SoundPoolTest
    │   │       └── subtitleplayer
    │   ├── MODULE_LICENSE_APACHE2
    │   ├── native
    │   │   ├── graphics
    │   │   │   └── jni
    │   │   └── include
    │   │       └── android
    │   ├── NOTICE
    │   ├── obex
    │   │   ├── Android.mk
    │   │   └── javax
    │   │       └── obex
    │   ├── opengl
    │   │   ├── include
    │   │   │   ├── EGL
    │   │   │   ├── ETC1
    │   │   │   ├── GLES
    │   │   │   ├── GLES2
    │   │   │   └── KHR
    │   │   ├── java
    │   │   │   ├── android
    │   │   │   ├── com
    │   │   │   └── javax
    │   │   ├── libagl
    │   │   │   ├── Android.mk
    │   │   │   ├── array.cpp
    │   │   │   ├── array.h
    │   │   │   ├── BufferObjectManager.cpp
    │   │   │   ├── BufferObjectManager.h
    │   │   │   ├── context.h
    │   │   │   ├── copybit.cpp
    │   │   │   ├── copybit.h
    │   │   │   ├── dxt.cpp
    │   │   │   ├── dxt.h
    │   │   │   ├── egl.cpp
    │   │   │   ├── fixed_asm.S
    │   │   │   ├── fp.cpp
    │   │   │   ├── fp.h
    │   │   │   ├── iterators.S
    │   │   │   ├── light.cpp
    │   │   │   ├── light.h
    │   │   │   ├── matrix.cpp
    │   │   │   ├── matrix.h
    │   │   │   ├── mipmap.cpp
    │   │   │   ├── primitives.cpp
    │   │   │   ├── primitives.h
    │   │   │   ├── state.cpp
    │   │   │   ├── state.h
    │   │   │   ├── texture.cpp
    │   │   │   ├── texture.h
    │   │   │   ├── TextureObjectManager.cpp
    │   │   │   ├── TextureObjectManager.h
    │   │   │   ├── Tokenizer.cpp
    │   │   │   ├── Tokenizer.h
    │   │   │   ├── TokenManager.cpp
    │   │   │   ├── TokenManager.h
    │   │   │   ├── vertex.cpp
    │   │   │   └── vertex.h
    │   │   ├── libs
    │   │   │   ├── Android.mk
    │   │   │   ├── EGL
    │   │   │   ├── egl_impl.h
    │   │   │   ├── entries.in
    │   │   │   ├── ETC1
    │   │   │   ├── GLES2
    │   │   │   ├── GLES_CM
    │   │   │   ├── hooks.h
    │   │   │   └── tools
    │   │   ├── tests
    │   │   │   ├── Android.mk
    │   │   │   ├── angeles
    │   │   │   ├── fillrate
    │   │   │   ├── filter
    │   │   │   ├── finish
    │   │   │   ├── gl2_basic
    │   │   │   ├── gl2_java
    │   │   │   ├── gl2_jni
    │   │   │   ├── gl_basic
    │   │   │   ├── gldual
    │   │   │   ├── gl_jni
    │   │   │   ├── gralloc
    │   │   │   ├── lighting1709
    │   │   │   ├── linetex
    │   │   │   ├── swapinterval
    │   │   │   ├── testPauseResume
    │   │   │   ├── textures
    │   │   │   └── tritex
    │   │   └── tools
    │   │       └── glgen
    │   ├── packages
    │   │   ├── DefaultContainerService
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── SettingsProvider
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── TtsService
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── jni
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── proguard.flags
    │   │   │   ├── res
    │   │   │   └── src
    │   │   └── VpnServices
    │   │       ├── AndroidManifest.xml
    │   │       ├── Android.mk
    │   │       ├── MODULE_LICENSE_APACHE2
    │   │       ├── NOTICE
    │   │       ├── res
    │   │       └── src
    │   ├── preloaded-classes
    │   ├── sax
    │   │   ├── java
    │   │   │   └── android
    │   │   └── tests
    │   │       └── saxtests
    │   ├── services
    │   │   ├── java
    │   │   │   ├── Android.mk
    │   │   │   └── com
    │   │   ├── jni
    │   │   │   ├── Android.mk
    │   │   │   ├── com_android_server_AlarmManagerService.cpp
    │   │   │   ├── com_android_server_BatteryService.cpp
    │   │   │   ├── com_android_server_KeyInputQueue.cpp
    │   │   │   ├── com_android_server_LightsService.cpp
    │   │   │   ├── com_android_server_SensorService.cpp
    │   │   │   ├── com_android_server_SystemServer.cpp
    │   │   │   ├── com_android_server_VibratorService.cpp
    │   │   │   └── onload.cpp
    │   │   └── tests
    │   │       └── servicestests
    │   ├── telephony
    │   │   ├── java
    │   │   │   ├── android
    │   │   │   └── com
    │   │   └── tests
    │   │       └── telephonytests
    │   ├── test-runner
    │   │   ├── Android.mk
    │   │   ├── src
    │   │   │   ├── android
    │   │   │   └── junit
    │   │   └── tests
    │   │       ├── AndroidManifest.xml
    │   │       ├── Android.mk
    │   │       └── src
    │   ├── tests
    │   │   ├── appwidgets
    │   │   │   ├── AppWidgetHostTest
    │   │   │   └── AppWidgetProviderTest
    │   │   ├── backup
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── backup_helper_test.cpp
    │   │   │   ├── backup_stress_test.sh
    │   │   │   ├── src
    │   │   │   ├── test_backup_common.sh
    │   │   │   ├── test_backup.sh
    │   │   │   └── test_restore.sh
    │   │   ├── BatteryWaster
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── BrowserPowerTest
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   └── src
    │   │   ├── BrowserTestPlugin
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── jni
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── NOTICE
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── CoreTests
    │   │   │   ├── android
    │   │   │   ├── Android.mk
    │   │   │   ├── MODULE_LICENSE_APACHE2
    │   │   │   ├── run_core_test.sh
    │   │   │   └── run_junit.sh
    │   │   ├── DpiTest
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── DumpRenderTree
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── assets
    │   │   │   └── src
    │   │   ├── framework-tests
    │   │   │   ├── Android.mk
    │   │   │   ├── README
    │   │   │   └── src
    │   │   ├── ImfTest
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   ├── src
    │   │   │   └── tests
    │   │   ├── LocationTracker
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── LotsOfApps
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── LowStorageTest
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   ├── permission
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   └── src
    │   │   ├── SmokeTest
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── README
    │   │   │   ├── src
    │   │   │   └── tests
    │   │   ├── SslLoad
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   └── src
    │   │   ├── StatusBar
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── Android.mk
    │   │   │   ├── res
    │   │   │   └── src
    │   │   └── TransformTest
    │   │       ├── AndroidManifest.xml
    │   │       ├── Android.mk
    │   │       ├── res
    │   │       └── src
    │   ├── tools
    │   │   ├── aapt
    │   │   │   ├── AaptAssets.cpp
    │   │   │   ├── AaptAssets.h
    │   │   │   ├── Android.mk
    │   │   │   ├── Bundle.h
    │   │   │   ├── Command.cpp
    │   │   │   ├── Images.cpp
    │   │   │   ├── Images.h
    │   │   │   ├── Main.cpp
    │   │   │   ├── Main.h
    │   │   │   ├── Package.cpp
    │   │   │   ├── printapk.cpp
    │   │   │   ├── Resource.cpp
    │   │   │   ├── ResourceTable.cpp
    │   │   │   ├── ResourceTable.h
    │   │   │   ├── SourcePos.cpp
    │   │   │   ├── SourcePos.h
    │   │   │   ├── StringPool.cpp
    │   │   │   ├── StringPool.h
    │   │   │   ├── tests
    │   │   │   ├── XMLNode.cpp
    │   │   │   ├── XMLNode.h
    │   │   │   ├── ZipEntry.cpp
    │   │   │   ├── ZipEntry.h
    │   │   │   ├── ZipFile.cpp
    │   │   │   └── ZipFile.h
    │   │   ├── aidl
    │   │   │   ├── aidl.cpp
    │   │   │   ├── aidl_language.cpp
    │   │   │   ├── aidl_language.h
    │   │   │   ├── aidl_language_l.l
    │   │   │   ├── aidl_language_y.y
    │   │   │   ├── Android.mk
    │   │   │   ├── AST.cpp
    │   │   │   ├── AST.h
    │   │   │   ├── generate_java.cpp
    │   │   │   ├── generate_java.h
    │   │   │   ├── options.cpp
    │   │   │   ├── options.h
    │   │   │   ├── options_test.cpp
    │   │   │   ├── search_path.cpp
    │   │   │   ├── search_path.h
    │   │   │   ├── Type.cpp
    │   │   │   └── Type.h
    │   │   ├── layoutlib
    │   │   │   ├── Android.mk
    │   │   │   ├── bridge
    │   │   │   └── create
    │   │   ├── localize
    │   │   │   ├── Android.mk
    │   │   │   ├── Configuration.cpp
    │   │   │   ├── Configuration.h
    │   │   │   ├── file_utils.cpp
    │   │   │   ├── file_utils.h
    │   │   │   ├── localize.cpp
    │   │   │   ├── localize.h
    │   │   │   ├── localize_test.cpp
    │   │   │   ├── log.h
    │   │   │   ├── merge_res_and_xliff.cpp
    │   │   │   ├── merge_res_and_xliff.h
    │   │   │   ├── merge_res_and_xliff_test.cpp
    │   │   │   ├── Perforce.cpp
    │   │   │   ├── Perforce.h
    │   │   │   ├── Perforce_test.cpp
    │   │   │   ├── res_check.cpp
    │   │   │   ├── res_check.h
    │   │   │   ├── SourcePos.cpp
    │   │   │   ├── SourcePos.h
    │   │   │   ├── test.cpp
    │   │   │   ├── testdata
    │   │   │   ├── Values.cpp
    │   │   │   ├── ValuesFile.cpp
    │   │   │   ├── ValuesFile.h
    │   │   │   ├── ValuesFile_test.cpp
    │   │   │   ├── Values.h
    │   │   │   ├── XLIFFFile.cpp
    │   │   │   ├── XLIFFFile.h
    │   │   │   ├── XLIFFFile_test.cpp
    │   │   │   ├── xmb.cpp
    │   │   │   ├── xmb.h
    │   │   │   ├── XMLHandler.cpp
    │   │   │   ├── XMLHandler.h
    │   │   │   ├── XMLHandler_test.cpp
    │   │   │   └── XMLNode.h
    │   │   ├── makekeycodes
    │   │   │   ├── Android.mk
    │   │   │   └── makekeycodes.cpp
    │   │   └── preload
    │   │       ├── 20080522.compiled
    │   │       ├── 20090811.compiled
    │   │       ├── 20100223.compiled
    │   │       ├── Android.mk
    │   │       ├── Compile.java
    │   │       ├── loadclass
    │   │       ├── LoadedClass.java
    │   │       ├── MemoryUsage.java
    │   │       ├── Operation.java
    │   │       ├── Policy.java
    │   │       ├── preload.iml
    │   │       ├── preload.ipr
    │   │       ├── PrintCsv.java
    │   │       ├── PrintHtmlDiff.java
    │   │       ├── PrintPsTree.java
    │   │       ├── Proc.java
    │   │       ├── Record.java
    │   │       ├── Root.java
    │   │       ├── sorttable.js
    │   │       └── WritePreloadedClassFile.java
    │   ├── vpn
    │   │   ├── java
    │   │   │   └── android
    │   │   └── tests
    │   │       └── vpntests
    │   └── wifi
    │       └── java
    │           └── android
    ├── ex
    │   └── common
    │       ├── Android.mk
    │       ├── java
    │       │   └── com
    │       ├── tests
    │       │   ├── AndroidManifest.xml
    │       │   ├── Android.mk
    │       │   └── src
    │       └── tools
    │           └── make-iana-tld-pattern.py
    ├── opt
    │   └── emoji
    │       ├── Android.mk
    │       ├── CleanSpec.mk
    │       ├── EmojiFactory.cpp
    │       └── EmojiFactory.h
    └── policies
        └── base
            ├── CleanSpec.mk
            ├── mid
            │   ├── Android.mk
            │   └── com
            ├── phone
            │   ├── Android.mk
            │   └── com
            └── PolicyConfig.mk




    框架目录结构: 分三类,base, ex, opt,policiece


    frameworks/
    ├── base
    │   ├── Android.mk
    │   ├── api
    │   ├── awt
    │   ├── build
    │   ├── camera
    │   ├── CleanSpec.mk
    │   ├── cmds
    │   ├── core
    │   ├── data
    │   ├── docs
    │   ├── ethernet
    │   ├── graphics
    │   ├── include
    │   ├── keystore
    │   ├── libs
    │   ├── location
    │   ├── media
    │   ├── MODULE_LICENSE_APACHE2
    │   ├── native
    │   ├── NOTICE
    │   ├── obex
    │   ├── opengl
    │   ├── packages
    │   ├── preloaded-classes
    │   ├── sax
    │   ├── services
    │   ├── telephony
    │   ├── test-runner
    │   ├── tests
    │   ├── tools
    │   ├── vpn
    │   └── wifi
    ├── ex
    │   └── common
    ├── opt
    │   └── emoji
    └── policiece
        └── base






    三层目录:
    frameworks/
    ├── base
    │   ├── Android.mk
    │   ├── api
    │   │   ├── 1.xml
    │   │   ├── 2.xml
    │   │   ├── 3.xml
    │   │   ├── 4.xml
    │   │   ├── 5.xml
    │   │   ├── 6.xml
    │   │   ├── 7.xml
    │   │   ├── 8.xml
    │   │   └── current.xml
    │   ├── awt
    │   │   ├── Android.mk
    │   │   ├── com
    │   │   ├── java
    │   │   ├── javax
    │   │   ├── org
    │   │   └── resources
    │   ├── build
    │   │   └── jarjar-rules.txt
    │   ├── camera          : 关于camera的HAL接口库。最终生成native共享库libcamera.so ,编译时根据是否定义USE_CAMERA_STUB来决定系统是否有Camera硬件支持。若没有实际的Camera硬件,
    │   │   ├── libcameraservice   :则编译时会和虚拟camera静态库(libcamerastub.a,由camerahardwarestub.cpp,fakecamera生成)链接生成libcamera.so。
    │   │   └── tests
    │   ├── CleanSpec.mk
    │   ├── cmds        :android系统启动时用到的commands
    │   │   ├── am
    │   │   ├── app_process   :可执行文件app_process,该文件可以根据输入参数决定是Zygote启动(参考init.rc中的语句 service zygote /system/bin/app_process -Xzygote / system/  bin --zygote --start-system-server). 
    │   │   ├── backup
    │   │   ├── bmgr :        :  java可执行程式, backup manager, java库形式分发到目标系统/system/framework/bmgr.jar 
    │   │   ├── bootanimation : android启动动画效果程式,该程式必须在android runtime启动后运行。
    │   │   ├── bugreport
    │   │   ├── dumpstate     : ndroid系统调试辅助工具,生成可执行程式dumpstate,同时建立两个程式dumpcrash bugreport指向该程式。
    │   │   ├── dumpsys       : 生成可执行程式dumpsys 
    │   │   ├── ime           : java可执行程式 ,IME输入法 input method manager, java库形式分发到目标系统/system/framework/ime.jar 
    │   │   ├── input         : java可执行程式,管理input事件例如key event,text event 等,java库形式分发到目标系统/system/framework/input.jar 
    │   │   ├── installd      : 可执行程式installd,install manager,仅在非simulator系统中运行,安装到目标系统/system/bin/installd 
    │   │   ├── keystore
    │   │   ├── pm
    │   │   ├── rawbu
    │   │   ├── runtime       : runtime可执行程式,仅在simulator中使用
    │   │   ├── service       : service可执行程式,用来查找,检查,呼叫service,安装到目标系统/system/bin/service 
    │   │   ├── servicemanager : android系统的service manager,可执行文件,安装到目标系统/system/bin/servicemanager,servicemanager会和kernel的binder driver协作共同完成service的添加、查询、获取、检查等。
    │   │   ├── stagefright
    │   │   ├── surfaceflinger :surfaceflinger可执行程式,安装到目标系统/system/bin/surfaceflinger,该程式会初始化surfaceflinger,surfaceflinger::inistantiate(),该程式会链接到libsurfaceflinger.so 
    │   │   ├── svc
    │   │   └── system_server
    │   ├── core
    │   │   ├── config
    │   │   ├── java      : framework的核心,此处主要指application framework,java库形式分发到/system/framework/ 
    │   │   ├── jni       :framework所需的JNI接口实现库,分发到/system/lib/lib/libandroid_runtime.so 
    │   │   ├── res       : framework所需的资源文件打包,/system/framework/framework-res.apk。
    │   │   └── tests
    │   ├── data
    │   │   ├── etc
    │   │   ├── fonts
    │   │   └── sounds
    │   ├── docs
    │   │   ├── docs-documentation-redirect.html
    │   │   ├── docs-redirect.html
    │   │   ├── docs-redirect-index.html
    │   │   ├── docs-samples-redirect.html
    │   │   ├── html
    │   │   └── overview-ext.html
    │   ├── ethernet
    │   │   └── java
    │   ├── graphics
    │   │   ├── java
    │   │   ├── jni
    │   │   └── tests
    │   ├── include
    │   │   ├── android_runtime
    │   │   ├── binder
    │   │   ├── camera
    │   │   ├── media
    │   │   ├── pim
    │   │   ├── private
    │   │   ├── surfaceflinger
    │   │   ├── tts
    │   │   ├── ui
    │   │   └── utils
    │   ├── keystore
    │   │   ├── java
    │   │   ├── MODULE_LICENSE_APACHE2
    │   │   ├── NOTICE
    │   │   └── tests
    │   ├── libs
    │   │   ├── audioflinger : 生成libaudioflinger.so,若无实际硬件和静态库libaudiointerface.a(audio interface虚拟设备)链接。若有实际硬件和libaudio.so链接,若支持bluetooth,则和liba2dp.so链接
    │   │   ├── binder
    │   │   ├── camera
    │   │   ├── rs
    │   │   ├── surfaceflinger : 生成libsurfaceflinger.so 
    │   │   ├── surfaceflinger_client
    │   │   ├── ui   : 生成libui.so
    │   │   └── utils  : 生成libutils.so 
    │   ├── location
    │   │   ├── java
    │   │   └── tests
    │   ├── media
    │   │   ├── java
    │   │   ├── jni
    │   │   ├── libdrm
    │   │   ├── libmedia
    │   │   ├── libmediaplayerservice
    │   │   ├── libstagefright
    │   │   ├── libsubtitle
    │   │   ├── mediaserver
    │   │   └── tests
    │   ├── MODULE_LICENSE_APACHE2
    │   ├── native
    │   │   ├── graphics
    │   │   └── include
    │   ├── NOTICE
    │   ├── obex
    │   │   ├── Android.mk
    │   │   └── javax
    │   ├── opengl
    │   │   ├── include
    │   │   ├── java
    │   │   ├── libagl
    │   │   ├── libs
    │   │   ├── tests
    │   │   └── tools
    │   ├── packages
    │   │   ├── DefaultContainerService
    │   │   ├── SettingsProvider
    │   │   ├── TtsService
    │   │   └── VpnServices
    │   ├── preloaded-classes
    │   ├── sax
    │   │   ├── java
    │   │   └── tests
    │   ├── services  
    │   │   ├── java : system server java可执行程式service.jar,分发到/system/framework/service.jar 
    │   │   ├── jni   : ystem server JNI接口实现库,libanroid_servers.so,分发到/system/lib/libanroid_servers.so
    │   │   └── tests
    │   ├── telephony
    │   │   ├── java
    │   │   └── tests
    │   ├── test-runner
    │   │   ├── Android.mk
    │   │   ├── src
    │   │   └── tests
    │   ├── tests
    │   │   ├── appwidgets
    │   │   ├── backup
    │   │   ├── BatteryWaster
    │   │   ├── BrowserPowerTest
    │   │   ├── BrowserTestPlugin
    │   │   ├── CoreTests
    │   │   ├── DpiTest
    │   │   ├── DumpRenderTree
    │   │   ├── framework-tests
    │   │   ├── ImfTest
    │   │   ├── LocationTracker
    │   │   ├── LotsOfApps
    │   │   ├── LowStorageTest
    │   │   ├── permission
    │   │   ├── SmokeTest
    │   │   ├── SslLoad
    │   │   ├── StatusBar
    │   │   └── TransformTest
    │   ├── tools
    │   │   ├── aapt
    │   │   ├── aidl
    │   │   ├── layoutlib
    │   │   ├── localize
    │   │   ├── makekeycodes
    │   │   └── preload
    │   ├── vpn
    │   │   ├── java
    │   │   └── tests
    │   └── wifi
    │       └── java
    ├── ex
    │   └── common
    │       ├── Android.mk
    │       ├── java
    │       ├── tests
    │       └── tools
    ├── opt
    │   └── emoji
    │       ├── Android.mk
    │       ├── CleanSpec.mk
    │       ├── EmojiFactory.cpp
    │       └── EmojiFactory.h
    └── policies
        └── base
            ├── CleanSpec.mk
            ├── mid
            ├── phone
            └── PolicyConfig.mk






    启动 Zygote


    -Xzygote /system/bin --zygote --start-system-server


    AndroidRuntime->AppRuntime


    int main(int argc,const char* const argv[])


    {


      AppRuntime runtime;生成AndroidRuntime实例


      ...


      AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);


    }


    其中 AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);


    呼叫Android::Start(const char* className,const bool startSystemServer)


    /framework/base/core/jni/AndroidRuntime.cpp


    该函数的处理内容:


    1.处理Jave Virtual Machine的一些参数选项;


    2.创建Dalvik Java虚拟机,JNI_CreateJavaVM(&mJavaVM,&env,&initArgs);


    3.注册Android Runtime中的JNI接口给虚拟机;


    4.呼叫Java类 com.android.internal.os.ZygoteInit的main函数




    在 类 com.android.internal.os.ZygoteInit的main函数中,


    1.注册Zygote socket用来接收请求;


    2.加载preloaded class、resources用来加快启动速度,文件清单在framework.jar中的preloaded-classes,framework-res.apk中的res中;


    3.启动System Server;


      fork出独立的进程名称为system-server,呼叫com.android.server.SystemServer类的main函数;


      在HandleSystemServerProcess函数中,RuntimeInit.ZygoteInit调用会呼叫AppRuntime的OnZygoteInit函数


    4.RuntimeInit.ZygoteInit函数会呼叫 com.android.server.SystemServer类的main函数。


      在此main函数中,系统首先加载android_server共享库libandroid_server.so 源代码位于/framework/base/service/jni


      在该库中有定义JNI_OnLoad函数,所以Dalvik在加载 libandroid_server.so 的时候会首先呼叫该JNI_OnLoad函数,该函数将android server注册到Java虚拟机中,包括 KeyInputQueue,HardwareService,AlarmManager,BatteryService,SensorService,SystemServer 等;


      呼叫在libanroid_server.so中注册的native函数init1,该函数位于/frameworks/base/services/jni/com_android_server_SystemServer.cpp中;


      init1函数呼叫libsystem_server中的system_init函数,该函数位于/frameworks/base/cmds /system_server/library/system_init.cpp中,该函数将SurfaceFlinger/AudioFlinger /MediaPlayer/CameraService等组件注册到ServiceManager中


      system_init函数反过来呼叫java类com.android.server.SystemServer的init2函数;


    5.在init2函数中,android创建了serverthread,在该thread中android开始注册各种service到service manager中


    包括EntropyService,PowerManager,ActivityManager,Telephony,PackageManager,ContentManager,ContentProvider,


    BatteryService,HardwareService,AlarmManager等等。


      注意该线程使用Looper来执行thread
    至此android system server启动完成。 


    展开全文
  • 深入Android Framework开发(入门篇)

    千人学习 2020-07-30 19:20:17
    广大的Android应用开发者是不是对Android系统充满着好奇,是不是很想学习Android系统开发,可惜自己学习难度又太大,本课程将手把手教你学Android Framework开发,带你走进Android系统开发的殿堂,全课程以实战为主...
  • android framework相关面试题,详细深入的介绍了android framework相关知识点,可以很好帮助对android framework的深入理解
  • android framework service

    2016-09-13 18:05:38
    android framework service
    android framework service
    
    展开全文
  • Android FrameWork解析

    千次阅读 2018-07-26 14:32:51
    众所周知,Android是一个基于Linux...所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。 Framework启动分析...
  • Android Framework知识点

    千次阅读 2017-11-13 09:51:23
    Android Framework知识点
  • Android framework学习

    千次阅读 2018-08-01 14:07:54
    一:概述  众所周知,Android是一个基于Linux实现的...所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。 ...
  • 转载:Android Studio导入并调试Android Framework
  • Android FrameWork浅识

    千次阅读 2015-09-12 15:29:23
    Android FrameWork 浅识
  • Android Framework概述

    万次阅读 2016-04-17 17:20:59
    这里写一些关于Android Framework比较重要的知识点,这些东西对于之后理解和研究Android Framework有很大好处,就是让我们脑子里先有一个大概的模型,以及认识一点之后经常会碰见的角色。  首先贴一张图,刚
  • Android Framework开发之前

    千次阅读 2019-04-30 12:15:23
    我也在这个节点,成功的从Android 纯应用开发,转为了Android FrameWork开发,节后就直接入职,具体公司不方便透露了。 先总结下面试,然后是面试过程,和我入职的准备过程。 面试第一轮,技术面试 面试采用电话...
  • Android Framework综述

    千次阅读 2016-06-10 10:55:31
    1 Android Framework介绍  Google给了一张系统架构图,在这张图上可以看到Android的大体框架组成:Android Applications,Application Framework,Dalvik Virtual Machine&Libraries,Linux。 1.1 应用程序层  ...
  • 该文章 属于总纲系列文章,主要是 [Android Framework] 专题系列文章的一个总结,系列文章分以下几个部分: Android系统层核心基础 Android binder机制从下到上解读 Android 开机启动流程 Android Framework ...
  • Frameworks detected: Android framework is detected in the project Configure问题解决关闭此项目的窗口,然后以 import project 的方式导入打开 ,等待gradle running 完毕即可。如果用这个方法没有解决你的问题...
  • Android FrameWork 学习之Android 系统源码调试
  • android 修改framework下资源文件后如何编译,androidframework 在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用 进入项目根目录 cd frameworks
  • Android Framework解析

    千次阅读 2016-06-03 19:35:15
    众所周知,Android是一个基于Linux实现的操作系统。...所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。
  • Android framework浅析

    千次阅读 2018-04-05 18:37:54
    先看下图结构:从图可以简单的看出 Android framework主要分成4层:1.应用程序层我们平常开发安卓用java编写的app都属于这一层,当然系统自带的程序比如时钟啊,email等都是属于这一层2.应用程序框架层这一层是核心...
  • 使用Android Studio调试Android Framework代码阅读源码很枯燥,如果能单步调试岂不是能使逻辑更清晰,更轻松的学习,本文章讲如何使用Android Studio调适Android Framework
  • Android Framework全套学习教程

    千次阅读 2019-03-13 17:33:25
    转:Android Framework全套学习教程
  • Android Framework入门介绍 https://blog.csdn.net/fu_kevin0606/article/details/79532710 framework概述 Android简介  Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机...
  • android framework 自学习。起步。
  • Android Framework 开篇

    2014-08-14 18:57:46
    在这里将全记录一系统的android framework的e
  • Android framework analysis

    2012-10-11 11:24:47
    Androidframework analysis  AndroidFramework 分析(一) 1.目录树 /framework/base/api  /framework/base/awt /framework/base/build /framework/base/camera 关于camera的HAL接口库。最终生成native...
  • 自从去年业余时间发布了Android Framework实战开发入门篇的视频后,大家一直期待的千里马进行新的视频更新,哈哈,首先在这里和大家说一下抱歉哈,因为本人不是专业的讲师培训机构,是一个地道的实战Android 程序员...
  • 专题分纲目录 均为索引,本纲为:Android Framework 音频子系统 系列文章目录 Android Framework 音频子系统(01)音频基础知识 Android Framework 音频子系统(02)音频系统框架 Android Framework 音频子系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,920
精华内容 10,368
关键字:

androidframework