分类: Google Android

  • Check shared library depends under android platform

    source build/envsetup.sh
    lunch full-eng

    arm-linux-androideabi-readelf -d out/target/product/generic/system/bin/fsck_msdos

  • (转) Android LogCat使用详解

    Android的Logcat用于显示系统的调试信息,可在分别以下几个地方查看和调用logcat: 
    1.eclipse的Debug模式或DDMS模式下的会有一个Logcat窗口,用于显示log日志 

    只需在eclipse中启动Android模拟器,切换到DDMS或debug模式下,就会有Logcat窗口,窗口右上方有一系列图标,其中V、D、I、W、E五个图标为五个调试信息过滤器:

    V:不过滤输出所有调试信息 包括 VERBOSE、DEBUG、INFO、WARN、ERROR
    D:debug过滤器,输出DEBUG、INFO、WARN、ERROR调试信息
    I:info过滤器,输出INFO、WARN、ERROR调试信息
    W:waring过滤器,输出WARN和ERROR调试信息
    E:error过滤器,只输出ERROR调试信息

    2.Android命令模式下,在启动一个模拟器是可以选择是否需要启动logcat: 

    Android Emulator命令的用法: emulator [options] [-qemu args]
    1.Android Emulator命令的用法: emulator [options] [-qemu args]

    启动模拟器命令:emulator -avd <name> -logcat <tags>;
    name:模拟器名字,tags调试信息过滤器类型
    例如:emulator -avd GPhone -logcat w
    启动GPhone模拟器并运行logcat显示调试信息,调试信息的过滤器是w(可替换为v、d、i、e),代表只显示waring和error两类调试信息。

    2.Android adb 命令:adb logcat [ <filter-spec> ] – View device log
    <filter-spec> == <priority>/<tag>,(pritrity标签,tag为过滤类型)
    例如:2.1、adb logcat 显示所有调试信息
    2.2、adb logcat *:w 显示waring过滤器过滤后的调试信息
    2.3、adb logcat Test1:V Test2:D 显示标签为Test1的所有调试信息,以及显示标签为Test2Debug过滤器过滤后的调试信息

    3.Android程序中访问调试日志,并显示:

    摘自:http://www.iteye.com/topic/477112
    logcat介绍命令选项。
    -s 默认设置过滤器
    -f      输出到日志文件
    -c 清除日志
    -d 获取日志
    -g 获取日志的大小
    -v      格式设置日志(见下面的格式打印格式)

    -v 格式 例
    brief W/tag ( 876): message
    process W( 876) message (tag)
    tag W/tag : message
    thread W( 876:0x37c) message
    raw message
    time 09-08 05:40:26.729 W/tag ( 876): message
    threadtime 09-08 05:40:26.729 876 892 W tag : message
    long [ 09-08 05:40:26.729 876:0x37c W/tag ] message

    代码例子:
    AndroidManifest.xml添加读取权限
    <uses-permission android:name=”android.permission.READ_LOGS” />

    清除日志
    try {
    Runtime.getRuntime().exec(“logcat -c”);
    } catch(Exception e) {

    获取日志
    try {
    ArrayList<String> commandLine = new ArrayList<String>();
    commandLine.add( “logcat”);
    commandLine.add( “-d”);
    commandLine.add( “-v”);
    commandLine.add( “time”);
    commandLine.add( “-s”);
    commandLine.add( “tag:W”);
    Process process = Runtime.getRuntime().exec( commandLine.toArray( new String[commandLine.size()]));
    BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()), 1024);
    String line = bufferedReader.readLine();
    while ( line != null) {
    log.append(line);
    log.append(“/n”)
    }
    } catch ( IOException e) {
    }

    结果:
    09-08 09:44:42.267 W/tag     (  754): message1
    09-08 09:44:42.709 W/tag     (  754): message2
    09-08 09:44:43.187 W/tag     (  754): message3
    09-08 09:44:45.295 E/tag     (  754): message8

     

     

     

    有时候当连接到手机上面进行调试的时候,在LogCat里面经常出现log信息之出现前面的几行,不断的在闪烁,无法正常查看log信息的情况,至少到现在还没有发现解决的办法,现在最还的做法就是将log在adb logcat命令行里面显示或者重定向文件中。

    还有一种情况是我只想打印我单独点检的Filter,如果用adb logcat会打印很多的无关的log信息,影响查看,可以使用adb logcat -s onFling查看我添加的Filter “onFling”,当然也是可以重定向到文件中。

    当有多台手机设备链接电脑时,adb链接特定的设备:adb -s HT114RX11535 logcat

  • Install googleplayer in android emulator

    #!/bin/bash
    GP_PATH=”/mirror/android_apk/googleplayer”

    function adb_get_GP_VER()
    {
    GP_VER=`adb shell getprop|grep ro.build.version.release|cut -b 30-|sed “s/].*//”`
    }

    adb_get_GP_VER

    DST_PATH=/system/app

    adb shell mount -o rw,remount /system

    #echo adb push “${GP_PATH}/${GP_VER}/GoogleLoginService.apk ${DST_PATH}/”

    adb push ${GP_PATH}/${GP_VER}/GoogleLoginService.apk ${DST_PATH}/
    adb push ${GP_PATH}/${GP_VER}/GoogleServicesFramework.apk ${DST_PATH}/
    adb push ${GP_PATH}/${GP_VER}/Phonesky.apk ${DST_PATH}/

    adb shell mount -o ro,remount /system

     

    http://wiki.rootzwiki.com/Google_Apps

     

     

     

     

  • Enable Physical Keyboard in android emulator

    Change the AVD default value and rebuild the emulator:

    nano  external/qemu/android/avd/hardware-properties.ini

    # From

    # Keyboard support (qwerty/azerty)
    name        = hw.keyboard
    type        = boolean
    default     = no
    abstract    = Keyboard support
    description = Whether the device has a QWERTY keyboard.

    # To

    # Keyboard support (qwerty/azerty)
    name        = hw.keyboard
    type        = boolean
    default     = yes
    abstract    = Keyboard support
    description = Whether the device has a QWERTY keyboard.

     

  • Adb driver on ubuntu 10.10

    lsusb
    sudo touch /etc/udev/rules.d/51-android.ruls
    sudo chmod 755
    gedit /etc/udev/rules.d/51-android.ruls
    sudo /etc/init.d/udev restart
    sudo adb kill-server
    sudo adb devices

    cat /etc/udev/rules.d/51-android.ruls

    SUBSYSTEM==”usb”, SYSFS{idVendor}==”0bb4″, MODE=”0666″, GROUP=”lzheng”
    SUBSYSTEM==”usb”, SYSFS{idVendor}==”18d1″, MODE=”0666″, GROUP=”lzheng”
    SUBSYSTEM==”usb”, SYSFS{idVendor}==”05c6″, MODE=”0600″, GROUP=”lzheng”
    SUBSYSTEM==”usb”, SYSFS{idVendor}==”0bb4″, MODE=”0600″, GROUP=”lzheng”
    SUBSYSTEM==”usb”, SYSFS{idVendor}==”710d”, MODE=”0600″, GROUP=”lzheng”
    SUBSYSTEM==”usb”, SYSFS{idVendor}==”0bb4″, MODE=”0600″, GROUP=”lzheng”
    # adb protocol on passion (Nexus One)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e12″, MODE=”0600″, OWNER=”lzheng”
    # fastboot protocol on passion (Nexus One)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”0bb4″, ATTR{idProduct}==”0fff”, MODE=”0600″, OWNER=”lzheng”
    # adb protocol on crespo/crespo4g (Nexus S)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e22″, MODE=”0600″, OWNER=”lzheng”
    # fastboot protocol on crespo/crespo4g (Nexus S)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e20″, MODE=”0600″, OWNER=”lzheng”
    # adb protocol on stingray/wingray (Xoom)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”22b8″, ATTR{idProduct}==”70a9″, MODE=”0600″, OWNER=”lzheng”
    # fastboot protocol on stingray/wingray (Xoom)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”708c”, MODE=”0600″, OWNER=”lzheng”
    # adb protocol on maguro/toro (Galaxy Nexus)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”04e8″, ATTR{idProduct}==”6860″, MODE=”0600″, OWNER=”lzheng”
    # fastboot protocol on maguro/toro (Galaxy Nexus)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e30″, MODE=”0600″, OWNER=”lzheng”
    # adb protocol on panda (PandaBoard)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”0451″, ATTR{idProduct}==”d101″, MODE=”0600″, OWNER=”lzheng”
    # fastboot protocol on panda (PandaBoard)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”0451″, ATTR{idProduct}==”d022″, MODE=”0600″, OWNER=”lzheng”
    # usbboot protocol on panda (PandaBoard)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”0451″, ATTR{idProduct}==”d00f”, MODE=”0600″, OWNER=”lzheng”
    # usbboot protocol on panda (PandaBoard ES)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”0451″, ATTR{idProduct}==”d010″, MODE=”0600″, OWNER=”lzheng”
    # adb protocol on grouper (Nexus 7)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e42″, MODE=”0600″, OWNER=”lzheng”
    # fastboot protocol on grouper (Nexus 7)
    SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e40″, MODE=”0600″, OWNER=”lzheng”

  • Script to Build Android Kernel Under Ubuntu

    #!/bin/bash
    #
    ANDROID=”android-4.1.1_r6.1″
    GCC=4.4.3

    KERNEL=goldfish
    KCONFIG=goldfish_armv7_defconfig

    #GIT_SERVER=aosp.zhenglei.net
    GIT_SERVER=127.0.0.1
    GIT_PATH=”git/aosp”

    PREBUILT=prebuilt
    HOST=”linux-x86″
    ARCH=”arm”
    BUILD_PATH=”build”

    function get_Tool {
    LOC=”$1″
    TAG=”$2″
    VER=”$3″
    TOOL_CHAIN=${ARCH}-eabi-${GCC}

    if [ ! -d ${LOC}/${TOOL_CHAIN} ];then
    if [ ! -d ${PREBUILT}/${TOOL_PATH} ];then
    if [ -d ${PREBUILT} ];then
    rm -rf ${PREBUILT}
    fi
    git clone git://${GIT_SERVER}/${GIT_PATH}/platform/prebuilt
    fi

    cd ${PREBUILT}
    CUR_BRANCH=`git branch|grep “^* “|sed “s/^* //”`
    if [ “${CUR_BRANCH}” != “${TAG}” ];then
    #    git tag -l
    git checkout -b ${TAG}
    fi
    cd ..

    cp -r ${PREBUILT}/${HOST}/toolchain/${TOOL_CHAIN} ${LOC}

    fi
    TOOL_PATH=”`pwd`/${LOC}/${TOOL_CHAIN}”
    }

    function get_Kernel {
    kernel=”$1″
    if [ ! -d ${kernel} ];then
    git clone git://${GIT_SERVER}/${GIT_PATH}/kernel/${kernel}.git
    fi

    cd ${kernel}
    # git branch -a
    CUR_BRANCH=`git branch|grep “^* “|sed “s/^* //”`
    if [ “${CUR_BRANCH}” != “${kernel}” ];then
    git checkout -t remotes/origin/android-${kernel}-2.6.29 -b ${kernel}
    fi
    if [ ! -d ../${BUILD_PATH}/${kernel} ];then
    mkdir ../${BUILD_PATH}/${kernel}
    git archive –format tar HEAD|tar x -C ../${BUILD_PATH}/${kernel}/
    fi
    cd ..
    }

    function build_Kernel {
    config=$1
    cd ${BUILD_PATH}/${kernel}
    #ls -l arch/${ARCH}/configs/
    make ${config}

    START=`date +%s`
    echo “Start to build at time:  $START”
    echo “################################”
    echo
    echo

    make -j4

    echo
    echo
    echo “################################”
    FINISH=`date +%s`
    echo “Finish build at time: $FINISH”
    echo
    ELAPSED=`expr $FINISH – $START`
    echo “Elapsed time: $ELAPSED”
    cd ..
    cd ..
    }

    ##### Main ######
    if [ ! -d ${BUILD_PATH} ];then
    mkdir ${BUILD_PATH}
    fi

    rm -rf ${BUILD_PATH}/*

    get_Tool $BUILD_PATH $ANDROID $GCC

    export ARCH=arm
    export SUBARCH=arm
    export CROSS_COMPILE=arm-eabi-
    export PATH=${TOOL_PATH}/bin:$PATH

    get_Kernel $KERNEL

    build_Kernel $KCONFIG

    # Output

    cp ${BUILD_PATH}/${KERNEL}/arch/${ARCH}/boot/zImage ${BUILD_PATH}/${KERNEL}/

    # Luanch emulator with build kernel
    # emulator -kernel ${KERNEL}/zImage

  • Mirror of Google Android Repository on Ubuntu 10.10

    ###########################################
    # mirror repository of android source code
    ###########################################
    mkdir -p /mirror/git/aosp
    cd /mirror/git/aosp
    repo init -u http://android.gogolesource.com/mirror/manifest.git –mirror
    repo sync -j18
    sudo chown -R gitdaemon .

    #####################################
    # Install Git Daemon on own server (repo.zhenglei.net)
    #####################################
    sudo apt-get install git-daemon-run

    #####################################
    # Update Config of Git Daemon
    #####################################
    cat /etc/sv/git-daemon/run
    #!/bin/sh
    GIT_DAEMON_CONF=”/etc/git-daemon.conf”
    if [ -f ${GIT_DAEMON_CONF} ];then
    GIT_DAEMON=`cat ${GIT_DAEMON_CONF}`
    else
    GIT_DAEMON=””
    fi
    exec 2>&1
    echo ‘git-daemon starting.’
    exec chpst -ugitdaemon \
    “$(git –exec-path)”/git-daemon –verbose  –export-all –reuseaddr  “${GIT_DAEMON}” –base-path=/mirror /mirror/git

    #####################################
    # Restart Git Daemon
    #####################################
    sv stop git-daemon
    sv start git-daemon

    ################################################
    # Access REPO mirror
    ################################################

    ## Clone Whole aosp
    mkdir -p /build/android
    cd /build/android
    repo init -u git://repo.zhenglei.net/aosp/mirror/manifest.git –mirror
    repo sync -j18

    ## Clone Platform only
    repo init -u git://repo.zhenglei.net/aosp/platform/manifest.git –mirror
    repo sync -j18

    ## Clone accessories only
    repo init -u git://repo.zhenglei.net/aosp/accessories/manifest.git –mirror
    repo sync -j18

    ## Clone Kernel only
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/common.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/exynos.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/goldfish.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/msm.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/omap.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/samsung.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/tegra.git

     

    #Clone Device

    git  clone –mirror  git://repo.zhenglei.net/aosp/device/generic/goldfish.git

    git  clone –mirror  git://repo.zhenglei.net/aosp/device/samsung/tuna.git

    #### Checkout Branching ####

    repo init -u git://repo.zhenglei.net/aosp/platform/manifest.git -b  android-4.1.1_r6.1
    repo sync -j 18

    ## Create New Branching in local ##
    repo start android-4.1.1_r6.1_jrd_dev –all

    ## Push New Branching to the server ##
    sudo sv stop git-daemon
    export GIT_DAEMON=”–enable=receive-pack”
    sudo sv start git-daemon
    repo forall -c git push aosp android-4.1.1_r6.1_jrd_dev
    sudo sv stop git-daemon
    export GIT_DAEMON=
    sudo sv start git-daemon

     

     

     

     

  • Update git on Ubuntu 10.10 for aosp access

    Now, it is  required to have git version 1.7.2 to access Google android repository,  need to update git version on ubuntu 10.10 manually:

    sudo apt-get clean

    sudo apt-get update

    sudo apt-get install libcurl4-gnutls-dev

    wget http://github.com/git/git/archive/v1.7.2.5.zip

    unzip v1.7.2.5.zip

    cd git-1.7.2.5

    make configure

    ./configure –prefix=/usr

    make all

    sudo make install