分类: Google Android

  • Android mount sdcard

    ===>  execute_media_format
    android/packages/apps/Settings/src/com/android/settings/MediaFormat.java

    ===>  mountService.formatVolume(extStoragePath);
    android/frameworks/base/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java

    ====>  formatVolume
    ====>  doFormatVolume
    android/frameworks/base/services/java/com/android/server/MountService.java

    ===> int CommandListener::VolumeCmd::runCommand
    ===> rc = vm->formatVolume(argv[2]);
    android/system/vold/CommandListener.cpp

    ==> int VolumeManager::formatVolume
    ==> mVolumes = new VolumeCollection();
    ==> return v->formatVol()
    android/system/vold/VolumeManager.h
    android/system/vold/VolumeManager.cpp

    ===> int Volume::formatVol
    ===> Fat::format(devicePath, 0))
    android/system/vold/Volume.cpp

    ===> int Fat::format(const char *fsPath, unsigned int numSectors)
    ===> static char MKDOSFS_PATH[] = “/system/bin/newfs_msdos”
    android/system/vold/Fat.cpp

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

    # C code
    android/system/vold

    # Launch sd formater in setting
    adb shell
    am start -n com.android.settings/.MediaFormat

    ##############################################################################

    以下是打开“无线和网络设置”界面:

    Intent intent = new Intent(“/”);
    ComponentName cm = new ComponentName(“com.android.settings”,”com.android.settings.WirelessSettings”);
    intent.setComponent(cm);
    intent.setAction(“android.intent.action.VIEW”);
    activity.startActivityForResult( intent , 0);

    以下是可以直接打开的系统界面:

    com.android.settings.AccessibilitySettings 辅助功能设置
    com.android.settings.ActivityPicker 选择活动
    com.android.settings.ApnSettings APN设置
    com.android.settings.ApplicationSettings 应用程序设置
    com.android.settings.BandMode 设置GSM/UMTS波段
    com.android.settings.BatteryInfo 电池信息
    com.android.settings.DateTimeSettings 日期和时间设置
    com.android.settings.DateTimeSettingsSetupWizard 日期和时间设置
    com.android.settings.DevelopmentSettings 应用程序设置=》开发设置
    com.android.settings.DeviceAdminSettings 设备管理器
    com.android.settings.DeviceInfoSettings 关于手机
    com.android.settings.Display 显示——设置显示字体大小及预览
    com.android.settings.DisplaySettings 显示设置
    com.android.settings.DockSettings 底座设置
    com.android.settings.IccLockSettings SIM卡锁定设置
    com.android.settings.InstalledAppDetails 语言和键盘设置
    com.android.settings.LanguageSettings 语言和键盘设置
    com.android.settings.LocalePicker 选择手机语言
    com.android.settings.LocalePickerInSetupWizard 选择手机语言
    com.android.settings.ManageApplications 已下载(安装)软件列表
    com.android.settings.MasterClear 恢复出厂设置
    com.android.settings.MediaFormat 格式化手机闪存
    com.android.settings.PhysicalKeyboardSettings 设置键盘
    com.android.settings.PrivacySettings 隐私设置
    com.android.settings.ProxySelector 代理设置
    com.android.settings.RadioInfo 手机信息
    com.android.settings.RunningServices 正在运行的程序(服务)
    com.android.settings.SecuritySettings 位置和安全设置
    com.android.settings.Settings 系统设置
    com.android.settings.SettingsSafetyLegalActivity 安全信息
    com.android.settings.SoundSettings 声音设置
    com.android.settings.TestingSettings 测试——显示手机信息、电池信息、使用情况统计、Wifi information、服务信息
    com.android.settings.TetherSettings 绑定与便携式热点
    com.android.settings.TextToSpeechSettings 文字转语音设置
    com.android.settings.UsageStats 使用情况统计
    com.android.settings.UserDictionarySettings 用户词典
    com.android.settings.VoiceInputOutputSettings 语音输入与输出设置
    com.android.settings.WirelessSettings 无线和网络设置

    ##############################################################################
    Generate SD Card Image file

    #64G:
    dd if=/dev/zero of=64G.img  count=0 seek=128M

    #8G:
    dd if=/dev/zero of=64G.img  count=0 seek=16M

    #8G (with zero filled)
    dd if=/dev/zero of=64G.img count=16M

    ##############################################################################
    Loop device

    #List loop devices:
    losetup -a

    #Add a loop device
    losetup /dev/loop1 8G_zero.img

    #Delete loop device
    losetup -d /dev/loop1

    find . -type f |xargs grep sd_format
    find . -name *.java |xargs grep sd_format

    ###################################################################
    Modify sd_format of android/packages/apps/Settings/res/values, impact on:

    target R.java/Manifest.java: Settings (out/target/common/obj/APPS/Settings_intermediates/src/R.stamp)
    target Java: Settings (out/target/common/obj/APPS/Settings_intermediates/classes)
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Copying: out/target/common/obj/APPS/Settings_intermediates/classes-jarjar.jar
    Copying: out/target/common/obj/APPS/Settings_intermediates/emma_out/lib/classes-jarjar.jar
    Copying: out/target/common/obj/APPS/Settings_intermediates/classes.jar
    Copying: out/target/common/obj/APPS/Settings_intermediates/noproguard.classes.jar
    target Dex: Settings
    Copying: out/target/common/obj/APPS/Settings_intermediates/noproguard.classes.dex
    target Package: Settings (out/target/product/generic/obj/APPS/Settings_intermediates/package.apk)
    ‘out/target/common/obj/APPS/Settings_intermediates/classes.dex’ as ‘classes.dex’…
    Processing target/product/generic/obj/APPS/Settings_intermediates/package.apk
    Done!
    Install: out/target/product/generic/system/app/Settings.odex
    Install: out/target/product/generic/system/app/Settings.apk
    Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
    Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
    target Java: SettingsTests (out/target/common/obj/APPS/SettingsTests_intermediates/classes)
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Installed file list: out/target/product/generic/installed-files.txt
    Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img

    ******************************************************
    SD FORMAT

    ==> StorageVolumePreferenceCategory
    ==> mAllowFormat = mStorageVolume != null && !mStorageVolume.isEmulated()
    android/packages/apps/Settings/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java

    SD Card Mount

    => “Preparing SD card”
    => “Damaged SD card”
    ==> ext_media_checking_notification_title
    ==> ext_media_unmountable_notification_title
    frameworks/base/core/res/res/values/strings.xml
    frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
    ===>MEDIA_UNMOUNTABLE

    *****************************************************

    #/system/etc/vold.fatab
    #/system/etc/vold.conf

    =>fatab
    ==>system/vold/main.cpp
    ===>process_config
    ====>VolumeManager
    =====>system/vold/VolumeManager.cpp
    =======>CommandListener
    ========>system/vold/CommandListener.cpp

    ********************************
    FAT
    ===> system/vold/Fat.cpp
    ====> FSCK_MSDOS_PATH
    =====> Fat::check
    ======>system/vold/Volume.cpp
    =======>createDeviceNode
    =========>Volume::mountVol
    =========>DirectVolume::handleBlockEvent

    Volume::mountVol
    ==> No impact on SDCard Mount, just for security fs

    DirectVolume::handleBlockEvent
    ==>NetlinkEvent
    ===>system/core/include/sysutils/NetlinkEvent.h
    =====>NetlinkEvent.mSubsystem==”block”, send to volume manage ==> DirectVolume::handleBlockEvent
    ======>NlActionAdd
    ========>system/core/libsysutils/src/NetlinkEvent.cpp

    ==========>system/core/libsysutils/src/NetlinkListener.cpp
    ==========>NetlinkListener::onDataAvailable

    ============>system/core/libsysutils/src/SocketListener.cpp
    ============>system/core/include/sysutils/NetlinkListener.h
    ============>class NetlinkListener : public SocketListener

    ***************************************************************************************
    *** Triger of  NlActionAdd ***

    “add”:
    =>NetlinkEvent::parseAsciiNetlinkMessage,    system/core/libsysutils/src/NetlinkEvent.cpp
    ==>NetlinkEvent::decode
    ===>NetlinkListener::onDataAvailable,        system/core/libsysutils/src/NetlinkListener.cpp
    ====>SocketListener::runListener,            system/core/libsysutils/src/SocketListener.cpp
    =====>SocketListener::threadStart,           system/core/libsysutils/src/SocketListener.cpp
    ======>SocketListener::startListener,        system/core/libsysutils/src/SocketListener.cpp
    =======>main,                                system/vold/main.cpp
    =======>NetlinkHandler::start,               system/vold/NetlinkHandler.cpp

    *** Handle of NlActionAdd ***

    “NlActionAdd”
    =>DirectVolume::handleBlockEvent,            system/vold/DirectVolume.cpp
    ==>VolumeManager::handleBlockEvent,          system/vold/VolumeManager.cpp
    ==>NetlinkHandler::onEvent,                  system/vold/NetlinkHandler.cpp

    **************************************************************************
    Framework:   MountService

    frameworks/base/services/java/com/android/server/SystemServer.java
    =>public MountService(Context context),     frameworks/base/services/java/com/android/server/MountService.java
    ==>mContext.registerReceiver(mBroadcastReceiver, filter, null, null);
    ===>BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
    ====>action.equals(Intent.ACTION_BOOT_COMPLETED)
    =====>if (state.equals(Environment.MEDIA_UNMOUNTED)) {
    int rc = doMountVolume(path);
    if (rc != StorageResultCode.OperationSucceeded) {
    Slog.e(TAG, String.format(“Boot-time mount failed (%d)”,
    rc));
    }
    ======>private int doMountVolume(String path)
    =======>mConnector.doCommand(String.format(“volume mount %s”, path));

    ==>mConnector = new NativeDaemonConnector
    ===>class NativeDaemonConnector,    frameworks/base/services/java/com/android/server/NativeDaemonConnector
    ====>public void run(),             frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
    =====>listenToSocket,               frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
    ======>mCallbacks.onDaemonConnected();     (mCallbacks=MountService)
    =======>onDaemonConnected()         frameworks/base/services/java/com/android/server/MountService.java

    **********************************************************************************
    Sd Card Mount Summary:

    frameworks/base/services/java/com/android/server/MountService.java:
    private int doMountVolume(String path):

    Use case of doMountVolume

    Case 1:  private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
    ===> Boot up SD Card mount

    Case 2:  public boolean onEvent(int code, String raw, String[] cooked)
    ===>frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
    ===>Callback
    ===>public boolean handleMessage(Message msg)
    ===> SD Card Insert mount

    Case 3: public int mountVolume(String path)
    ==> packages/apps/Settings/src/com/android/settings/deviceinfo/Memory.java
    ==> User Setting/Mount

    Case 4: public int mountVolume(String path)
    ===> frameworks/base/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
    ===> Factory Reset

  • Android SDK download URL

    http://developer.android.com/sdk/index.html

    http://dl.google.com/android/repository/repository.xml

    http://dl-ssl.google.com/android/repository/repository.xml

    http://dl-ssl.google.com/android/repository/repository-5.xml

    http://dl-ssl.google.com/android/repository/addons_list-1.xml

    http://dl-ssl.google.com/android/repository/addon.xml

     

     

  • GoogleIO 2011

    有机会再次来到三藩市,参加Google IO 2011

    San FranCisico Airport

    旧金山机场

     

     

     

     

     

    第4大街

    4th Street

     

     

    moscone

    MOSCONE CENTER

     

     

     

    moscone

    MOSCONE CENTER

     

     

    T Shirt

    T-Shirt

     

    Badge

    Badge

     

     

    pass

    My Pass

     

     

  • Config SipDroid for PBXes

    Authorized User Name:        ZhengLei

    Password:                           Extension Password

    Server:                                pbxes.org

    domain:

    User Name:                       Extension Name

    Port:                                  5060

    Protocol                           TCP

    Wifi Network               ON/OFF

    3G Network                 ON/OFF

    EDGE Network              ON/OFF

    VPN                               ON/OFF

  • 注册 Google Voice

    Download a SIP client from Google Market:       Sipdroid/ fring/ CSipSimple / SIPGVDialer

    Register one SIP acount:   zhenglei@iptel.org

    Setup SIP client  Sipdroid or fring with your SIP acount  on Android Handset 

    Obtain one free USA virtual phone number  (say, 425-998-0653) from   IPKall, and binging with your sip acount

    Launch browser on PC with  USA proxy and Enter into Google voice Setup

    Select your favorite phone number provided by google (say, 650- 646-4296,  818-949-8065)

    Binging with your iPKall phone number with Google voice phone number

    Verify your Google Voice phone number on Android Handset with Fring apk: accept the call and dial the requested code.

    That’s OK.

     

  • Android移动APN设置

      一、 名称:CMWAP (这个名字不重要,叫什么都行)

    • APN:cmwap
    • 代理:010.000.000.172 (注意是三位数的)
    • 端口:80
    • MCC:460
    • MNC:00
    • APN类型:default (这个要自己输入的)
    • 按MENU保存
      二、 名称:CMNET设置 (这个名字不重要,叫什么都行)

    • APN:cmnet
    • MCC:460
    • MNC:00
    • APN类型:default (这个要自己输入的)
    • 按MENU保存
      三、 名称:彩信

    • APN:cmwap (这个名字不重要,叫什么都行)
    • MMSC:mmsc.monternet.com (不能有HTTP://出现,要直接写网址)
    • 彩信代理:010.000.000.172 (注意是三位数的)
    • 彩信端口:80
    • MCC:460
    • MNC:00
    • APN类型:mms (这个要自己输入的)
    • 按MENU保存
    • 五. 检查

    • 进入手机拨号:输入*#*#4636#*#*——点“手机信息”——
    • (info => 4636)