2015年5月4日 星期一

MySQL語法

1. Login MySQL with password
$mysql -u -root -p
Enter password:

2. How to get a list of user accounts
mysql> SELECT User FROM mysql.user;

3. How to delete user
mysql> DROP USER 'user_name'@'localhost';

4. Create user
mysql>CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_name';

5. Change user password
mysql> UPDATE user SET Password=PASSWORD("your_password") WHERE User='user_name';

6List all database
mysql>SHOW DATABASES;

7. Show current use database
mysql>SELECT DATABASE();

8. Change database
mysql>use database_name;

9. Create database
mysql>CREATE DATABASE db_name;

10. Delete database
mysql>DROP DATABASE db_name;

11. allow user to connect to the server from localhost with password
mysql>grant usage on *.* user_name@localhost identified by'user_password';

12. grant all privileges on database to this user
mysql>grant all privileges on db_name.* to user_nae@localhost;

13. Show tables
mysql>SHOW TABLES FROM db_name;

14 Show all tables
mysql>SHOW TABLES;

15. Show data from table
mysql>select * from table_name;

16. update column
update 資料表名稱 set 欄位1='值1',欄位2='值2',欄位3='值3',... 欄位N='值N'
where 條件式 (例如 sn='5' 或 name='塔司尼' );


2015年2月10日 星期二

How to setup NFS in Ubuntu

How to setup NFS in Ubuntu

  1. install nfs
$sudo apt-get install nfs-kernel-server
  1. check hosts name
$hostname --fqdn
ex:
$hostname --fqdn
usernamehost
The host name could not have special character, like "-, _, ", only "usernamehost". if return error, modify the host name, log-out then log-in.
$sudo vim /etc/hosts
127.0.1.1 kelseylaiAS5551
…
….
  1. setup nfs
$vim /etc/hosts.allow
portmap: [tv_ip]
lockd: [tv_ip]
rquotad: [tv_ip]
mountd: [tv_ip]
statd: [tv_ip]
ex:
$sudo vim /etc/hosts.allow
...
portmap: 192.168.0.107
lockd: 192.168.0.107
rquotad: 192.168.0.107
mountd: 192.168.0.107
statd: 192.168.0.107
…
/etc/hosts.deny 和 /etc/hosts.allow 設定對portmap的訪問. 採用這兩個配置檔案有點類似黑名單,白名單的意思. 先在/etc/hosts.deny中禁止所有用 戶對portmap的訪問.再在/etc/hosts.allow 中允許某些特殊用戶對portmap的訪問。
  1. modify NFS directory permission

$sudo vim /etc/exports
…
/home/NFS 192.168.0.*(rw,sync,no_root_squash)
…

$exportfs -r

NFS掛載目錄及權限由/etc/exports檔案定義
例如,我在家目錄下建立一個名為NFS的目錄,作為共享給板子的,則在該檔案裡加入
/home/NFS/192.168.0.*(rw,sync,no_root_squash)
  1. make direcotry for NFS
$mkdir [you_want_nfs_path]
ex:
$sudo mkdir /home/NFS

   6. restart nfs server
$sudo service nfs-kernel-server restart



2014年2月18日 星期二

android adb

一、adb連線方式
Android default adb是使用USB連線,但也可以透過ethernet或是wifi
如果要改設adb的模式
1. usb to ethernet(wifi)
in device端
$su
$setprop service.adb.tcp.port 5555
$stop adbd
$start adbd

in computer端
$adb tcpip 5555
$adb connect 192.168.0.101:5555 

2. 如果要將adb改成usb連線
in device端
$setprop service.adb.tcp.port -1 
$stop adbd 
$start adbd


二、如何啟動adbd

adb實際是透過adbd(adb daemon )在運作的,android 本身有透過property "persist.service.adb.enable"去儲存adbd的狀態,透過更改值為0或1來啟動或停止adb. 例如在init.rc中設定啟動及停止的條件

add property in init.rc
on property:persist.service.adb.enable=1 
    start adbd 
on property:persist.service.adb.enable=0 
    stop adbd

這樣就可以在 runtime中,藉由修改property 來達到改變adb狀態

三、取得adb id
$adb shell id


2013年8月9日 星期五

Android Makefile

1. build binary file to host; out/host/linux-x86/bin/xxx

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_EXECUTABLES := aaa
include $(BUILD_HOST_PREBUILT)


2. build prebuilt APK to system/app

include $(CLEAR_VARS)
LOCAL_MODULE := install_flash_player
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

3. build multiple prebuilt lib to system/lib

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_LIBS := libflashplayer.so \
  libysshared.so
LOCAL_SHARED_LIBRARIES := libflashplayer \
 libysshared
include $(BUILD_MULTI_PREBUILT)

4. build prebuilt binary file to system/bin

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := bbb
LOCAL_MODULE := bbb
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)
prebuilt_files :=
$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files))

5. build .jar

LOCAL_PATH:= $(call my-dir)
#MAKE_JAR
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := selfthread
LOCAL_MODULE_TAGS := optional
#need these jar built first, used in code base: core, ext, framework
LOCAL_JAVA_LIBRARIES := core ext framework
include $(BUILD_JAVA_LIBRARY)
#MAKE_XML
include $(CLEAR_VARS)
LOCAL_MODULE := selfthreadxml.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

6. execute shell script in Android make file

#one shell call shell command once, if you don't want exit shell, use ";"
#use "``", in some environment it will shoe missing separator
#example $(shell `pwd`)
PWD := $(shell pwd)/vendor/company/anymote-protocol/java
$(shell `echo $(PWD)`)
$(shell `cd $(PWD);\
make;\
cd -`)

#or in one line
$(shell `cd $(PWD);make;cd -`)

#if use target, type $mm target, but default won't execute it, example
#$mm anymote
anymote:
cd vendor/company/anymote-protocol/java;\
echo `pwd`;\
make;\
cd -

7. make order, for example, run anymote.mk, polo.mk first

LOCAL_PATH:= $(call my-dir)
include $(call all-makefiles-under, $(LOCAL_PATH))

include $(ANDROID_BUILD_TOP)/vendor/company/anymote-protocol/java/anymote.mk
include $(ANDROID_BUILD_TOP)/vendor/company/google-tv-pairing-protocol/java/polo.mk

8. what is different with all-subdir-makefiles and all-makefiles-under

all-subdir-makefiles: 表示“當前目錄下沒有需要編譯的文件,請向子目錄深入”,是告訴編譯器繼續向目錄深處遞迴的一種寫法。
all-makefiles-under: 為當前目錄下有文件需要編譯,而且在當前目錄下還有子目錄,子目錄中也有文件需要編譯,同樣也要包含告訴編譯器在編譯完當前目錄下的文件後,繼續向子目錄深入的語句。

2013年5月24日 星期五

Android Resource

How get Resource

1. getResources().getString(android.R.string.cancel);
2. Resources.getSystem().getString(android.R.string.cancel);
3. getString(android.R.string.cancel);

The first and the third ones are using "context." invisibly. So, very often (in static members or out of activity members) you can't use them directly, unless you pass context or resource as a static variable or as a parameter into your scope. But the second one

Resources.getSystem().getString(android.R.string.cancel)
You can use ABSOLUTELY EVERYWHERE in your application, even in static constants declaration! But for system resources only


GetLocals


Resources.getSystem().getassets().getLocals()
getAsset() 是從下列路徑取得,不是從frameowrks-res.apk中取得
framework/base/core/java/android/content/res/AssetManager.java
framework/base/core/jni/android_util_AssetManager.cpp
framework/base/include/utils/AssetManager.h
framework/base/libs/utils/AssetManager.cpp
framework/base/libs/utils/ResourceTypes.cpp




2012年7月9日 星期一

重建Ubuntu MBR

Ubuntu的MBR不見了,只剩下windows的MBR
1. 準備Ubuntu LiveCD
2. 利用Ubuntu LiveCD開機
3. 進入terminal
    # cd /
    # sudo -s -H
    # mount -t ext4 /dev/sda6 /mnt      ->sda6為Ubuntu所在的磁區
    # mount -t proc proc /mnt/proc
    # mount -t sysfs /sys /mnt/sys
    # mount -o bind /dev /mnt/dev
    # chroot /mnt /bin/bash         ->切換 root到硬碟上的Ubuntu

如果不知道Ubuntu在那一個磁區,查詢硬碟上的partition資訊    
    # ls -l /dev/disk/by-label
    # fdisk -l

安裝grub2
    # aptitude install grub2 grub-pc

如果已經安裝了grub,先移除
    # apt-get pruge grub

更新grub
   # update-grub
   # grub-install /dev/sda
   # reboot
恢復原先Ubuntu的grub

如果開機後,沒有任何開機選單,只出現
  grub >  -> 這代表沒有grub menu
  grub > find /boot/grub/core.img
  grub > root (hd0, 5)    -> root (hdx, y) previous command will tell you the x, y in this case is (hd0, 5)
  grub > kernel /boot/grub/core.img
  grub > boot
  現在可以進入Ubuntu 系統

如果開機會直接進入Ubuntu,沒有menu可以選擇要那個OS
   # update-grub
  讓 grub自動建立menu.list, 檔案位置在/boot/grub/menu.list
  grub2沒有menu.list,是grub.cfg, 檔案位置在/boot/grub/grub/cfg

2012年7月6日 星期五

git 相關

git error
fatal: unable to create 'abc/.git/index.lock' File exist.
If no other git process is currently running, this probably means a git process crashed in this repository earlier, Make sure no other git process is running and remove the file manual to continue.

Solution:
remove ../.git/index.lock
ex: rm -r ./.git/index.lock

git command
1. repo sync
2. repo start new_branch . (新增 branch)
3. git branch (確認branch狀態)
4. git branch -d branch_name( 刪除branch)
5. git diff > diff.txt ( 將有修改的檔名的不同處存下來)
6. git status (顯示所有有動變的檔案)
7. git commit -a
8. git show HEAD( show上一個commit 資訊)
9. repo upload . (實際上傳到server)

如果還要修改但還沒merge
1 git add .
2. git commit --amend
3. repo upload .

切換到別的branch
git checkout branch_name

將存下的 patch加入source code 之中(打 patch)
patch -R p1 < xxx.patch --dry-run

將檔案回歸到原始(server)狀態
git checkout -- filename

新增一個檔案
git add -p file_name(只加這一個檔案,有時路徑下有很多檔案修改,但只想上傳這一個)

新增 folder
git add folder_name(先新增folder, 才會出現此folder下的檔案)
PS. 如果新增一個空資料夾,必須在此資料夾加一個隱藏檔

取得git log並格式化
git log --pretty=format:"%h%x09%an%x09%ad%x09%s"



MSVCR100D.dll missing

MSVCR100D.dll missing
MS: Miscrosoft
V: visual
C: C++
R: Redistributable

Solution
Release:
1. in VS, project properity
2. configuration > C++ Generation
3. change to Multi-thread (/MT)

Debut:
1. same with release
2. change to Multi-thread Debug (/MTd)

Windows 8 相關

metro app execute directly(直接執行metro app)
1. VS2011 tool bar :
    Project > store > create app package > Build a package to use local only
2. There is added a folder "Packages" in Project, find file "Add-AppxDevPackage.bat",
    press mouse right key then select "Run as administrator".

Trun on or off windows features ( enable .net framework 3.5)
control panel >Programs > Programs Features > Turn windows Features on or off > check or uncheck Feature.

if Enable .Net Framework 3.5, but result is fail, then.

1. mount windows 8 image (XXX.iso)
2. find file inside \sources\sxs
3. copy *.* from \sources\sxs\*.* to a temp folder, ex: c:\net35\*.*
4. execute cmd.exe as administrator. (cmd.exe in c:\windows\system32\cmd.exe,  按右鍵,run as administrator)
5. type command in cmd.exe
    c:\windows\system32> Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:c:\net35 /LimitAccess
6. The result : The operation completed successfully.

Search files
搜尋含有特定文字的檔案.
ex: 'ABC' in *.txt

Ubuntu好用command

1. 將grep出來的文字replace
grep -rl matchstring somedir | xargs sed -i 's/string1/string2/g'
ex: grep -rl 'ABCD' * |xargs sed -i 's/ABCD/HEF/g'

2.將^M的換行符號拿掉
(1) sed  "s/\r//" dos_file  > dos_file_linux
(2) sed -i 's/\x0D$//' filename.txt

3. mount iso
sudo mount -t auto -o loop xxx.iso /mnt/iso

4. 安裝deb
 dpkg -i abc.deb

5. 轉換PNG到PPM
 (1) apt-get install netpnm
 (2) pngtopnm sample.png > linuxlogo.pnm
 (3) pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
 (4) pnmtoplainpnm linuxlogo224.pnm > linuxlogo_clut224.ppm

PS. 如果要取代原linux logo, replace driver/vide/logo下的原圖檔.

5. copy folder to server
scp -r folder_name user@10.109.109.109:/home/user_name/folder_name
ex: scp -r TVBox favoritepili@10.109.109.109:/home/favoritepili/

6. Download file from server
scp -r user@10.109.109.109:/home/user/folder /home/user
ex: scp -r favoritepili@10.109.109.109:/home/favoritepili/TVBox /home/favoritepili

7. unload driver
sduo modprobe -r vboxpci

8. list module
(1) lsmod | grep vbox
(2) modprobe -l | grep vbox

9. load module
modprobe vboxdrv

2011年11月7日 星期一

Edit default android property value

更改預設property value.

方法一:
在makefile中加入"ADDITIONAL_BUILD_PROPERTIES"

ex:
in product_name.mk (device/product_name/product_name.mk)

...
ADDITIONAL_BUILD_PROPERTIES += \
    ro.debuggable=1
...
---------------------------------------------------------------

in my_product_name.mk (不同的product)
...
ADDITIONAL_DEFAULT_PROPERTIES := \
     ro.debuggable=1
...


side effect:
因為我在進行建立不同的product tree,可以有不同的product在同一份code base裡,
但我在實驗中發現,利用ADDITIONAL_BUILD_PROPERTIES, ADDITIONAL_DEFAULT_PROPERTIES,
會影響到全部的product.


所以加個判斷:

ifeq ($(TARGET_PRODUCT),my_produce_name)
ADDITIONAL_DEFAULT_PROPERTIES += \
        ro.allow.mock.location=1
endif


PS. ADDITIONAL_BUILD_PROPERTIES是指增加property到out/target/product/product_name/system/build.prop,
ADDITIONAL_DEFAULT_PROPERTIES是增加property到out/target/product/product_name/root/default.prop.

方法二
修改 build/core/Makefile
TARGET_PRODUCT_DIR=device/$(TARGET_PRODUCT)
$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
...
if [ -f $(TARGET_PRODUCT_DIR)/system.prop ]; then \
                        cat $(TARGET_PRODUCT_DIR)/system.prop >> $@; \
                else \
                        cat $(TARGET_DEVICE_DIR)/system.prop >> $@; \
                fi
...
原本的寫法,build.prop是去cat device/product_name/system.prop,還有一些default值.
我是把它改成先以current product path下判斷是否有system.prop,如果沒有就抓device path下的 system.prop

PS. $(INSTALLED_BUILD_PROP_TARGET): 就是out/target/product/product_name/system/build.prop

方法三:
在makefile 裡加:

PRODUCT_PROPERTY_OVERRIDES += \
        persist.service.adb.enable=1

ifeq ($(TARGET_PRODUCT),my_product_name)
ADDITIONAL_DEFAULT_PROPERTIES += \
        ro.allow.mock.location=1
endif


這樣就只會生效current product.

2011年10月3日 星期一

Busybox

1. Download busybox
    1) adb push busybox /mnt/sdcard/busybox
    2) adb install Busybox.apk
2. change system to read, write
    1) adb shell
    2) # mount
        rootfs / rootfs ro,relatime 0 0
        tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
        devpts /dev/pts devpts rw,relatime,mode=600 0 0
        proc /proc proc rw,relatime 0 0
        sysfs /sys sysfs rw,relatime 0 0
        debugfs /sys/kernel/debug debugfs rw,relatime 0 0
        none /acct cgroup rw,relatime,cpuacct 0 0
        tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
        tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
        none /dev/cpuctl cgroup rw,relatime,cpu 0 0
        /dev/block/mmcblk0p3 /system ext4 ro,relatime,barrier=1,data=ordered 0 0
        /dev/block/mmcblk0p7 /data ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered 0 0
        /dev/block/mmcblk0p4 /cache ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered 0 0
        /dev/fuse /mnt/sdcard fuse                           rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
        找出 system所在位置
3) mount -o rw,remount /dev/block/mmcblk0p3 /system
4) cat /mnt/sdcard/busybox > /system/bin/busybox
5) cd /system/bin
6) chmod 777 busybox
7) mount -o ro,remount /dev/block/mmcblk0p3 /system
3. install Busybox.apk
1) execute Busybox.apk
2) press button Install, it will show "done".
4. use busybox
1) busybox find . -name com.android.settings


2011年9月28日 星期三

在adb中使用sqlite

Step:
1. adb shell
2. sqlite3 data/data/com.android.providers.settings/databases/settings.db
3. select * from system;         //show all value in this talbe.
4. update system set value="0" where name ="accelerometer_rotation";  
5. .database  //show database
6. .table         //show table
7. .quit        //exit
8. delete from system where id=0;   //delete
9. create table test(one varchar(10), two smallint);
10. insert into test values('goodbye', 20);
11. .help

2011年9月21日 星期三

將APK加到system.img

添加 HelloAndroid.apk
首先在 Android 源始碼建立一個目錄:
mkdir -p prebuilt/android-arm/HelloAndroid


建立一個 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Module name should match apk name to be installed.
LOCAL_MODULE := HelloAndroid
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := debug

include $(BUILD_PREBUILT)

$(call add-prebuilt-files, APPS, $(prebuilt_files))
 
詳細參考android open source website
http://www.kandroid.org/online-pdk/guide/build_cookbook.html 

修改android settings default value

settings default value
android settings的default value大多可以在/frameworks/base/packages/SettingsProvider/res/values/default.xml 中找到.

overwirte settings value
在device下,所屬的產品目錄下利用overlay,新增相同的路徑及需要overwrite的檔案(default.xml). 將所需要修改的設定值寫入default.xml中.

ex: /device/nvidia/ventana_cts/overlay/frameworks/base/packages/SettingsProvider/res/values/default.xml

default.xml 撰寫規則

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <add-resource type="bool" name="def_adb_enabled"/>
         <bool name="def_adb_enabled">true</bool>
     <integer name="def_screen_off_timeout">1800000</integer>
</resources>

若是原先在default.xml中沒有的項目,利用tag "add-resource ", 若是已經存在,就直接寫入新的預設值.

其它失敗情形 
少數項目還是無法修改,則直接修改/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
及 /frameworks/base/packages/SettingsProvider/res/values/default.xml
 加入下列子串

DatabaseHelper.java :
loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,
                    R.bool.def_accessibility_enabled);
default.xml :
<bool name="def_accessibility_enabled">true</bool>

2011年9月14日 星期三

在Ubuntu上使用adb

在任何路徑下皆可執行adb
修改bashrc
favoritepili@favoritepili-AS5551:~$sudo gedit /.bashrc
加入下面文字.
#Android adb
export PATH=${HOME}/Android/android-sdk-linux_x86/platform-tools/:$PATH
or
sudo ln -s /home/kelsey_lai/Android/android-sdk-linux/platform-tools/adb /bin/adb

adb shell無法執行
執行adb shell 顯示 "error: insufficient permissions for device"
favoritepili@favoritepili-AS5551:~$ adb devices
List of devices attached ????????????    no permissions

1. 使用root權限
favoritepili@favoritepili-AS5551:~$sudo -s
[sudo] password for favoritepili:
root@favoritepili-AS5551:~# adb kill-server ; adb start-server
* daemon not running. starting it now *
* daemon started successfully *
root@favoritepili-AS5551:~# exit
exit
favoritepili@favoritepili-AS5551:~$
再次執行adb shell就可以了。

2.
轉到adb目錄
favoritepili@favoritepili-AS5551:~$cd ~/Android/android-sdk-linux_x86/platform-tools
favoritepili@favoritepili-AS5551:~/Android/android-sdk-linux_x86/platform-tools$ ls -l adb
-rwxr-xr-x 1 favoritepili favoritepili  341694 2010-05-11 05:46 adb
favoritepili@favoritepili-AS5551:~/Android/android-sdk-linux_x86/platform-tools$ sudo chown root:root adb
[sudo] password for favoritepili:
favoritepili@favoritepili-AS5551:~/Android/android-sdk-linux_x86/platform-tools$ ls -l adb
-rwxr-xr-x 1 root root   341694 2010-05-11 05:46 adb
favoritepili@favoritepili-AS5551:~/Android/android-sdk-linux_x86/platform-tools$ sudo chmod u+s adb
favoritepili@favoritepili-AS5551:~/Android/android-sdk-linux_x86/platform-tools$ ls -l adb
-rwsr-xr-x 1 root root   341694 2010-05-11 05:46 adb
favoritepili@favoritepili-AS5551:~/Android/android-sdk-linux_x86/platform-tools$
這樣無論那個用戶啟動adb皆是root權限.

PS.
adb pull下來的文件主權限為root:root,所以修改起来不方便.

2010年10月27日 星期三

應用程式如何取得系統權限

在Android上執行不同的apk會跑在不同的sandbox上, 並且以不同的身份(uid)在執行, 但問題是我今天想要用system身份做某些事或是想要在不同的app分享資源時, 就會需要能對apk指定uid, 方法有兩種分別說明如下:

方法一
1.修改AndroidManifest.xml, 新增android:sharedUserId="android.uid.system"屬性(使用system身份)
2.修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行

3.重新編譯apk

PS. LOCAL_CERTIFICATE := platform, 由於試驗的這份source code 是由客戶提供,所以"platform"這個關鍵字已經被定義好了.

方法二
1.如方法一修改AndroidManifest.xml, 新增 android:sharedUserId="android.uid.system" 屬性(使用system身份)
2.使用Eclipse編譯出apk
3.刪除該apk中META-INF目錄下的CERT.SF和CERT.RSA兩個檔案
4.以系統的public/private key重新簽署打包apk, signapk的用法為

Usage: signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar
5.實際執行命令如下.
$java -jar signapk.jar -w ./platform.x509.pem ./platform.pk8 ./input.apk ./output.apk(此為將所有檔案放於同一路徑下)

PS. signapk.jar , platform.x509.pem, platform.pk8可於source code中取得
如果想要不同的apk以相同的uid身份在執行, 則在這些不同的APK中AndroidManifest.xml的語法為

manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="{MY.URI.FORMAT}"

在Ubuntu上安裝及設定NDK

1. 下載NDK for Ubuntu,位置可任意決定.

2. 編輯 bashrc
    1) 於終端機下command "sudo gedit ~/.bashrc", 添加下面文字.
    2) NDK_ROOT=android_ndk_path, 後面的目徑是NDK的目錄,前面的名稱可任取.
         ex: NDK_ROOT=/home/favoritepili/Android/android-ndk-r4b/
     3) export NDK_ROOT
     4)儲存,離開.
     PS.  由於是下載r4版,所以從此版開始不需要修改host-setup.sh

3. 測試
     1) 進入目標compile目錄. ex: "/home/favoritepili/Android/android-ndk-r4b/samples/hello-jni"
     2) type "$NDK_ROOT/ndk-build
     3) 如果成功會產生obj及libs兩個目錄

4. error
   1) 如果有錯誤訊息"Your APP_BUILD_SCRIPT points to an unknown file".
       確認你的路徑有沒有設錯, APP_BUILD_SCRIPT設定在project的.mk檔中.

   2)可以type command "$NDK_ROOT/ndk-build NDK_LOG=1", 來查看有何問題.

建立Windows cmd.exe 的shortcut

建立Windows cmd.exe shortcut

1. 在檔案總管任意路徑下按右鍵選"新增","捷徑".
2. 在輸入項目的位置中打"%COMSPEC%",然後按下一步.
3. 捷徑的名稱可任意取,然後按完成.
4. 點選此捷徑按右鍵.
5. 於"捷徑"此分頁中的"開始位置"輸入你想要執行cmd.exe時的預設位置. ex:"F:\Tools\AndroidNeedTools\android-sdk-windows\tools"
6. 完成.

2010年9月10日 星期五

android adb command

1. 偵測裝置
adb devices
PS. 如果在type "adb devices"後出現device offline,有可能是低電壓.也可嘗試type "adb kill-server XXXXXX",再重新type "adb devices".
2. 安裝檔案
adb install -r F:\aaa.apk
3. 取得手機資訊
adb getprop
PS.這是未出廠手機可以使用.
4. copy file to device
adb push f:\led_control.so /system/lib/led_control.so
5. 刪除檔案
adb shell rm -r /system/sd/app
6. 取得BT資料
    1) adb shell
    2) hcitool
7. 取得wifi, power, connectivity...
    svc wifi [enable | disable]
    svc wifi prefer (set wifi as the preferred data network)
    svc power [ ]
    svc data [ ]
    svc help
8. 同時看adb logcat並同時存下logcat
    adb logcat | tee logcat.txt
9. Run CTS test
start --planCTS -P android.security.cts.package in [ \build\core\Makefile.in$(PACKAGE)]
如果要測細項.
10. Launcher application
      adb shell am start -n packagename/.Intent
      ex: adb shell am start -n com.example/.Welcome