[Android] ‘aapt’ error. Pre Compiler Build aborted. (aapt.exe crash)

又是個Android SDK的很嚴重的Bug

從8/16發現,一直到現在9月了,才把這個嚴重的Bug給繞過去

搞了一個多月了,終於不用再找其他電腦頂替了

 

2011-08-16 00 58 01.png

 

 

 

怎麼說呢

使用的是Windows版Android SDK r12版(最新)

使用Java版本:已測試JDK 6u23 6u24 6u25 6u26皆有這狀況

只要是在Library裡面有drawable,aapt.exe又是在verbose模式底下

就一定會crash

 

請大家集氣反映給google請他修掉這個Bug~

 

 

測試方式如下

  1. open an Android project under eclipse and call it ‘a’
  2. open the ‘a’ properties and check the ‘Is Library’ check box.
  3. open another Android project and name it ‘b’.
  4. open it’s properties and add ‘a’ as an android library it uses.
  5. open the android plugin preferences and change the build from silent to verbose
  6. clean both projects.
  7. on linux everything is neat, on windows it crashes after the line:’baseFile zd has flavor (null)’ which according to linux should be:’baseFile 0 has flavor ,,,,,,,,,,,hdpi,,,,,,,’ most chances null pointer exception occurs here, the question is why only on windows ?

 

  1.  eclipse開一個專案叫A
    2.  A專案  滑鼠右鍵 >  內容,勾上Is Library
    3.  開另一個專案叫B
    4.  B專案 滑鼠右鍵 > 內容,引用A專案的函式庫
    5.  在eclipse裡, Windows > Preferences > Android > Build

Build output的選項為Verbose

  1.   二個專案分別做 Project > Clean

  2.  跳出Bug

[2011-09-03 01:41:01 – (專案名稱A)] Refreshing resource folders.
[2011-09-03 01:41:01 – (專案名稱A)] Starting full Pre Compiler.
[2011-09-03 01:41:01 – (專案名稱A)] Removing generated java classes.
[2011-09-03 01:41:01 – (專案名稱A)] Preparing generated java files for update/creation.
(android-sdk路徑)platform-toolsaapt.exe package -m -v –auto-add-overlay
-J (專案路徑A)gen -M (專案路徑A)AndroidManifest.xml -S (專案路徑A)res
-S (專案路徑B)res -I (android-sdk路徑)platformsandroid-8android.jar 
[2011-09-03 01:41:05 – (專案名稱A)] ‘aapt’ error. Pre Compiler Build aborted.

把系統產生的ㄧ大串指令貼到cmd上得到

(…..前面略)
Including resources from package: (android-sdk路徑)platformsandroid-8android.jar

applyFileOverlay for drawable
trying overlaySet Key=icon.png
baseFile zd has flavor (null)

 


 

解決方法其實上面就有提到了

我還是補一下圖好了

 

在eclipse裡, Windows > Preferences

2011-09-03 02 15 05.png  

 

 

在 Android > Build這裡,將Build output改為Silent或是Normal即可繞過這個Bug

2011-09-03 02 17 58.png  


 

另外,順道一提

2011-09-03 02 30 27.png  

 

Android SDK r12版目前只能搭配 Java JDK 1.6.0 (6u xx)版唷~

(文章截止Java出到 JDK 1.6.0 (6u27) )

不能直接灌JDK 7喔

因為JDK 7的金鑰計算工具有改

JDK 6版預設使用MD5
JDK 7版預設使用SHA-1

在使用Google Map的時候,算key.store的時候,就會不管怎麼樣都會驗證不過  (哇哈哈~~)

 

 

 

補充:JDK7的使用者需要加上 -v 這個參數,使用MD5數值

keytool -v -list -keystore ~/.android/debug.keystore

就可以用它產生金鑰了, (感謝BB大大提供的方法)

 

 

Google  API 註冊頁面

http://code.google.com/android/maps-api-signup.html

2011-09-03 02 33 43.png  

 

 

 

 

希望大家能感受到Android小綠機器人快樂的體驗

而不會做小綠機器人的噩夢 (對開發者而言啦XD)

 

Google呀Google.   大家都在接連修正你的Bug…..(囧)

 

參考文章

http://stackoverflow.com/questions/6887886/debugging-android-tools-code-under-windows
http://comments.gmane.org/gmane.comp.handhelds.android.devel/146994

[分享] RT-N10+刷DD-WRT之後如何回復原廠設定

我的RT-N10+刷了DD-WRT剛好滿半年摟

 

已經買了第三台了

我真的蠻推這台的,蠻穩的

開BT也沒掛過

 

我最喜歡他的DD-WRT的

VPN功能,不過要搭配固定IP或是ddns使用會比較好用

DHCP Forward,這也是比一般的switch強大的地方

這真的要好好說一下

之前使用switch,直接向主要的分享器(DHCP功能)   去索取IP

當線路不穩定時,IP資訊就不見,網路就馬上斷線了

而且要回復連線時,還要重新去遠方索取IP,回復時間

 

 

但DHCP Forward的話,他會在機器上存份cache

當線路異常時,不會馬上移掉IP資訊,會改由次要分享器 索取IP資訊

(不知道我推論的對不對)

 

 

還沒有刷DD-WRT的看這裡

DD-WRT要看型號刷,不是每家分享器都可以這樣玩

http://j796160836.pixnet.net/blog/post/28819027

 

DD-WRT版本又更新摟 Build r17201  (2011-06-14)

路徑在

Path: Downloads › others › eko › BrainSlayer-V24-preSP2 › 2011 › 06-14-11-r17201 › Asus-RT-N10PLUS

 

 

————————————-

今天遇到設定Wifi Repeater的問題

DD-WRT也有提供Repeater的相關設定

但我可能設定不出來

 

 

想試試看原廠Rom的設定

但我的機器已經刷了DD-WRT怎麼辦?

 

請遵循以下步驟刷回原廠設定值  (這步驟原廠的說明書也有,我後來才找到   哈)

 

 

用筆尖戳Reset鈕數十秒,直到WPS燈到閃爍(半秒鐘亮、半秒鐘熄)

這時就已經進入了Recovery Mode了

 

這時候

你的電腦接上網路線,另一端接上

手動設定IP

IP: 192.168.1.2

Mask: 255.255.255.0

Gateway: 192.168.1.1

 

使用原廠的工具

Firmware Restoration軟體

 

解壓縮FW_RT_N10Plus_2016.zip得到RT-N10+_2.0.1.6.trx原廠韌體檔

指定路徑到  RT-N10+_2.0.1.6.trx  原廠韌體檔

按下Update

然後等待

 

之後在瀏覽器打

 

http://192.168.1.1/

 

預設帳號是admin密碼admin

 

就進的去了

 

 

 

參考文章

http://kururu6233.pixnet.net/blog/post/27817519-%E3%80%90%E8%B2%B7%E7%89%A9%E3%80%91asus-rt-n10%2B-%E7%84%A1%E7%B7%9A%E8%B7%AF%E7%94%B1%E5%99%A8

http://koukaipan.pixnet.net/blog/post/26909556#comment-29020862

http://tomatousb.org/forum/t-287762/build-53-bricked-asus-rt-n10  (這是給RT-N10用的,不過跟RT-N10+的步驟相同)

http://digiland.tw/viewtopic.php?id=1561   (RT-N10和RT-N10+的差異大比較,大概是N10+不能換天線N10可以,N10+的各個硬體配備比N10好,但比N10便宜,何樂不為?)

[Android] Google出的Android萬用驅動,驅動裝不上嗎?請看這

2011-08-20 01 44 53.png

 

 

我先說,這不一定適用所有其他非Android的usb驅動
這就要煩請你自已測試了,如有成功可以不吝分享給我

這是一篇不是給初學者看的文章,裡面盡是一堆歪招 haha

—————————————————————————–

之前我遇到一台白牌機的Android驅動裝不上,問了朋友他說

到SDK manager裡面,要確定一個叫做Google USB Driver有安裝

 

2011-08-20 01 54 28.png

2011-08-20 01 55 34.png   

然後

 

在我的電腦 右鍵 > 內容  找到裝置管理員  

2011-08-20 01 45 09.png2011-08-20 01 46 32.png

找到Android

2011-08-20 01 47 22.png

右鍵 > 更新驅動程式

2011-08-20 01 48 39.png  

 

選擇 Browse my computer for driver software

2011-08-20 01 49 28.png

 

 

 

 

這個是重點,Let me pick from a list device drivers on my computer

2011-08-20 01 49 52.png

 

 

到了選擇類型的頁面,選Show All Devices,直接按下一步

2011-08-20 01 50 56.png

 

按下have Disk…..   (從磁片安裝)

2011-08-20 01 51 38.png

 

 

 

選擇其路徑

 

然後選擇路徑      <你裝的android SDK的路徑>extrasgoogleusb_driverandroid_winusb.inf

我的是

C:Program FilesAndroidandroid-sdkextrasgoogleusb_driverandroid_winusb.inf

2011-08-20 01 51 52.png

找到android_winusb.inf

2011-08-20 01 53 33.png  

 

就會有三個可以選,隨便選,但通常是第一個

2011-08-20 01 52 25.png

詢問驅動程式簽章事宜,直接按確定繼續

2011-08-20 01 52 36.png  

 

就安裝完成了

2011-08-20 01 52 58.png

 


如果你的驅動已經安裝完畢的話就不用看這篇了

搞不定的話請跟我一起繼續奮鬥………

 

 

我的win7裝好了  但xp遲遲無法這樣安裝

 

 

 

 

 

 

有一天,我無意間開了android_winusb.inf

這才恍然大悟

 

有了這一招,應該沒有所謂的上不了的驅動

只是上了會不會跳藍底白字的畫面而已

 


2011-09-03 03 14 08.png

 

這是Google USB Driver, r4

裡面的android_winusb.inf  內容

 

;
; Android WinUsb driver installation.
;
[Version]
Signature           = "$Windows NT$"
Class               = AndroidUsbDeviceClass
ClassGuid           = {3F966BD9-FA04-4ec5-991C-D326973B5128}
Provider            = %ProviderName%
DriverVer           = 12/06/2010,4.0.0000.00000
CatalogFile.NTx86   = androidwinusb86.cat
CatalogFile.NTamd64 = androidwinusba64.cat

;
; This section seems to be required for WinUsb driver installation.
; If this section is removed the installer will report an error
; "Required section not found in INF file".
;
[ClassInstall32]
Addreg = AndroidWinUsbClassReg

[AndroidWinUsbClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1

[Manufacturer]
%ProviderName% = Google, NTx86, NTamd64

[Google.NTx86]

%SingleAdbInterface%        = USB_Install, USBVid_18d1&Pid_0005&Rev_0223&MI_01
%SingleAdbInterface%        = USB_Install, USBVid_18d1&Pid_0005&MI_01

; HTC Dream

%SingleAdbInterface%        = USB_Install, USBVID_0BB4&PID_0C01
%CompositeAdbInterface%     = USB_Install, USBVID_0BB4&PID_0C02&MI_01
%SingleBootLoaderInterface% = USB_Install, USBVID_0BB4&PID_0FFF
; HTC Magic
%CompositeAdbInterface%     = USB_Install, USBVID_0BB4&PID_0C03&MI_01
;
;Moto Sholes
%SingleAdbInterface%        = USB_Install, USBVID_22B8&PID_41DB
%CompositeAdbInterface%     = USB_Install, USBVID_22B8&PID_41DB&MI_01
;
;Google NexusOne
%SingleAdbInterface%        = USB_Install, USBVID_18D1&PID_0D02
%CompositeAdbInterface%     = USB_Install, USBVID_18D1&PID_0D02&MI_01
%SingleAdbInterface%        = USB_Install, USBVID_18D1&PID_4E11
%CompositeAdbInterface%     = USB_Install, USBVID_18D1&PID_4E12&MI_01
%CompositeAdbInterface%     = USB_Install, USBVID_18D1&PID_4E22&MI_01

[Google.NTamd64]
; HTC Dream
%SingleAdbInterface%        = USB_Install, USBVID_0BB4&PID_0C01
%CompositeAdbInterface%     = USB_Install, USBVID_0BB4&PID_0C02&MI_01
%SingleBootLoaderInterface% = USB_Install, USBVID_0BB4&PID_0FFF
; HTC Magic
%CompositeAdbInterface%     = USB_Install, USBVID_0BB4&PID_0C03&MI_01
;
;Moto Sholes
%SingleAdbInterface%        = USB_Install, USBVID_22B8&PID_41DB
%CompositeAdbInterface%     = USB_Install, USBVID_22B8&PID_41DB&MI_01
;
;Google NexusOne
%SingleAdbInterface%        = USB_Install, USBVID_18D1&PID_0D02
%CompositeAdbInterface%     = USB_Install, USBVID_18D1&PID_0D02&MI_01
%SingleAdbInterface%        = USB_Install, USBVID_18D1&PID_4E11
%CompositeAdbInterface%     = USB_Install, USBVID_18D1&PID_4E12&MI_01
%CompositeAdbInterface%     = USB_Install, USBVID_18D1&PID_4E22&MI_01

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include     = winusb.inf
AddService  = WinUSB,0x00000002,WinUSB_ServiceInstall

[WinUSB_ServiceInstall]
DisplayName     = %WinUSB_SvcDesc%
ServiceType     = 1
StartType       = 3
ErrorControl    = 1
ServiceBinary   = %12%WinUSB.sys

[USB_Install.Wdf]
KmdfService = WINUSB, WinUSB_Install

[WinUSB_Install]
KmdfLibraryVersion  = 1.9

[USB_Install.HW]
AddReg  = Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"

[USB_Install.CoInstallers]
AddReg    = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUSBCoInstaller2.dll
WdfCoInstaller01009.dll

[DestinationDirs]
CoInstallers_CopyFiles=11

[SourceDisksNames]
1 = %DISK_NAME%,,,i386
2 = %DISK_NAME%,,,amd64

[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll  = 1
WdfCoInstaller01009.dll = 1

[SourceDisksFiles.amd64]
WinUSBCoInstaller2.dll  = 2
WdfCoInstaller01009.dll = 2

[Strings]
ProviderName                = "Google, Inc."
SingleAdbInterface          = "Android ADB Interface"
CompositeAdbInterface       = "Android Composite ADB Interface"
SingleBootLoaderInterface   = "Android Bootloader Interface"
WinUSB_SvcDesc              = "Android USB Driver"
DISK_NAME                   = "Android WinUsb installation disk"
ClassName                   = "Android Phone"

 


這份文件要從最後的[Strings]
這區塊開始看

 

 

2011-09-03 02 42 00.png  

比對了一下,這個驅動

類別名叫Android Phone

驅動有三個,個別叫做

Android ADB Interface
Android Composite ADB Interface
Android Bootloader Interface

驅動有分32位元版和64位元版

紅字的部分就是我們要更動的

 

步驟如下:  (XP測試可用)

  1.  先判斷你的作業系統是  32位元(x86)   還是  64位元(x64)

決定你這行是要加在 [Google.NTx86]   還是 [Google.NTamd64]  區塊

  1.  找到裝置管理員,找到那驚嘆號的Android上面按一下   右鍵  ->  內容

2011-09-03 03 17 14.png   

 

在詳細資料頁籤裡面,找到硬體識別碼  (Hardware Ids)  (這是重點)

2011-09-03 03 17 02.png

把這些文字選起來按 Ctrl +  C   然後在文字編輯器貼上

 

我的有二筆資料,如下

 

USBVid_18d1&Pid_0005&Rev_0223&MI_01
USBVid_18d1&Pid_0005&MI_01

 

 

  1.   依樣畫葫蘆,將文字加上去

 

%SingleAdbInterface%        = USB_Install, USBVid_18d1&Pid_0005&Rev_0223&MI_01
%SingleAdbInterface%        = USB_Install, USBVid_18d1&Pid_0005&MI_01

開頭至於要加哪一個(SingleAdbInterface , CompositeAdbInterface ),都試試看

2011-09-03 03 19 14.png  

 

 

  1.    然後就存檔,重新裝驅動看看,一定會抓到「非常合適」的驅動

因為你手動把他改上去了嘛   XDDD

 

 

 

(Win7 會出現這個大紅色的警示視窗,不用裡他直接按Install this driver software anyway)

2011-09-03 03 20 49.png

就安裝成功了

2011-09-03 03 21 12.png  

 

 

  1.   再來打開cmd  ,用cd 指令切到       <你裝的android SDK的路徑>platform-tools

我的是

C:Program FilesAndroidandroid-sdkplatform-tools

然後鍵入指令

adb kill-server

然後再鍵入指令

adb start-server

重新啟動連接介面的程式

 

神奇的事情就發生了喔
我把驅動裝好了~~~

[Android]解決INSTALL_FAILED_INSUFFICIENT_STORAGE

開發時出現

[2011-08-03 14:50:26 – videoAdsTest] Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

[2011-08-03 14:50:26 – videoAdsTest] Please check logcat output for more details.
[2011-08-03 14:50:27 – videoAdsTest] Launch canceled!

代表說模擬器的程式空間被裝滿了

手動到

menu > 設定 > 管理應用程式  手動移除一些之前測試的程式.

 

或是關掉模擬器,重新啟動模擬器時選擇Wipe User Data

[Android]解決模擬器invalid command-line parameter問題

之前更新Android的SDK之後,打開模擬器出現了以下的問題

2011-08-03 20 57 45.png   

上面寫的是

invalid command-line parameter: Files.
Hint: use ‘@foo’ to launch a virtual device named ‘foo’.
please use -help for more information

意思說是指令列錯誤

 


查了網路上的資料

2011-08-03 21 02 13.png

在Eclipse的  Window >  Preferences  中

2011-08-03 21 04 15.png

 

在左側Android的選項中,重新指定SDK的路徑

 

 

我的設定是

D:Program Files (x86)Androidandroid-sdk

手動修改成

D:Progra~2Androidandroid-sdk

像這樣

2011-08-03 21 05 34.png

 

如果你的SDK是裝在

C:Program FilesAndroidandroid-sdk

那就手動修改成

C:Progra~1Androidandroid-sdk

這樣就OK了

————————————————————————–  

 

因為以前的檔名(資料夾名稱)都要符合DOS的8+3的規定

檔名只能有8個字元加上3個字元的副檔名

 

到了之後才有所謂的長檔名(沒有這種限制)

在DOS裡的長檔名表示就是,打出8個字之後,加上~符號

第一個就1號  第二個就2號……以此類推

原文

Explanation: All nowadays folder names longer than 8 characters have their old DOS equivalent name (8 characters with no spaces).

So:
– “C:Program Files…” is converted into “C:Progra~1…”
– “C:Program Files (x86)…” becomes “C:Progra~2…”

 

至於為何會倒退回之前的表示法

我想這Bug  以後會被修掉吧

 

 

參考資料

http://ideanotion.net/android-sdk-invalid-command-line-parameter-files-error/

[轉貼]常用的PHP正規表示式

 

轉貼自:http://mro-php.blogspot.com/2009/10/php_19.html
很感謝大大的整理,有些還蠻實用的

 

“^\d+$” //非負整數(正整數+ 0)
“^[0-9]*[1-9][0-9]*$” //正整數
“^((-\d+)|(0+))$” //非正整數(負整數+ 0)
“^-[0-9]*[1-9][0-9]*$” //負整數
“^-?\d+$” //整數
“^\d+(\.\d+)?$” //非負浮點數(正浮點數+ 0)
“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\ .[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮點數
“^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮點數(負浮點數+ 0)
“^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9] *\.[0-9]+)|([0-9]*[1-9][0-9]*)))$” //負浮點數//OSPHP.COm.CN
“^(-?\d+)(\.\d+)?$” //浮點數
“^[A-Za-z]+$” //由26個英文字母組成的字符串
“^[AZ]+$” //由26個英文字母的大寫組成的字符串
“^[az]+$” //由26個英文字母的小寫組成的字符串
“^[A-Za-z0-9]+$” //由數字和26個英文字母組成的字符串
“^\w+$” //由數字、26個英文字母或者下劃線組成的字符串
“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址
“^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$” // url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1- 9]{1}))|(3[0|1]))$/ //年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0 |1]))/(d{2}|d{4})$/ //月/日/年
“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|( ([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$” //Emil //OSPHP.COm .CN
/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?( [0-9]{7,8})(\-[0-9]+)?$/ //電話號碼
“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0- 5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[ 0-5])$” //IP地址

匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*)) *(\\?\\S*)?$
//開源代碼OSPhP.COm.CN

匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$

元字符及其在正則表達式上下文中的行為:

\將下一個字符標記為一個特殊字符、或一個原義字符、或一個後向引用、或一個八進制轉義符。

^匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配’\n’或’\r’之後的位置。

$匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配’\n’或’\r’之前的位置。

*匹配前面的子表達式零次或多次。

+匹配前面的子表達式一次或多次。 +等價於{1,}。

?匹配前面的子表達式零次或一次。 ?等價於{0,1}。

{n} n是一個非負整數,匹配確定的n次。

{n,} n是一個非負整數,至少匹配n次。

{n,m} m和n均為非負整數,其中n <= m。最少匹配n次且最多匹配m次。在逗號和兩個數之間不能有空格。

?當該字符緊跟在任何一個其他限制符(*, +, ?, {n}, {n,}, {n,m})後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。

.匹配除”\n”之外的任何單個字符。要匹配包括’\n’在內的任何字符,請使用象'[.\n]’的模式。
(pattern)匹配pattern並獲取這一匹配。

(?:pattern)匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。

(?=pattern)正向預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。

(?!pattern)負向預查,與(?=pattern)作用相反

x|y匹配x或y。

[xyz]字符集合。

[^xyz]負值字符集合。

[az]字符範圍,匹配指定範圍內的任意字符。

[^az]負值字符範圍,匹配任何不在指定範圍內的任意字符。

\b匹配一個單詞邊界,也就是指單詞和空格間的位置。

\B匹配非單詞邊界。

\cx匹配由x指明的控製字符。

\d匹配一個數字字符。等價於[0-9]。

\D匹配一個非數字字符。等價於[^0-9]。

\f匹配一個換頁符。等價於\x0c和\cL。

\n匹配一個換行符。等價於\x0a和\cJ。

\r匹配一個回車符。等價於\x0d和\cM。

\s匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。

\S匹配任何非空白字符。等價於[^ \f\n\r\t\v]。
//開源代碼OSPhP.COm.CN

\t匹配一個製表符。等價於\x09和\cI。

\v匹配一個垂直製表符。等價於\x0b和\cK。

\w匹配包括下劃線的任何單詞字符。等價於’[A-Za-z0-9_]’。

\W匹配任何非單詞字符。等價於’[^A-Za-z0-9_]’。

\xn匹配n,其中n為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。

\num匹配num,其中num是一個正整數。對所獲取的匹配的引用。

\n標識一個八進制轉義值或一個後向引用。如果\n之前至少n個獲取的子表達式,則n為後向引用。否則,如果n為八進制數字(0-7),則n為一個八進制轉義值。

\nm標識一個八進制轉義值或一個後向引用。如果\nm之前至少有is preceded by at least nm個獲取得子表達式,則nm為後向引用。如果\nm之前至少有n個獲取,則n為一個後跟文字m的後向引用。如果前面的條件都不滿足,若n和m均為八進制數字(0-7),則\nm將匹配八進制轉義值nm。 //PHP開源代碼

\nml如果n為八進制數字(0-3),且m和l均為八進制數字(0-7),則匹配八進制轉義值nml。

\un匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。

匹配中文字符的正則表達式: [u4e00-u9fa5]

匹配雙字節字符(包括漢字在內):[^x00-xff]

匹配空行的正則表達式:n[s| ]*r

匹配HTML標記的正則表達式:/<(.*)>.*|<(.*) />/

匹配首尾空格的正則表達式:(^s*)|(s*$)

匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

利用正則表達式限製網頁表單裡的文本框輸入內容:

用正則表達式限制只能輸入中文:onkeyup=”value=value.replace(/[^u4E00-u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘ text’).replace(/[^u4E00-u9FA5]/g,”))”

用正則表達式限制只能輸入全角字符: onkeyup=”value=value.replace(/[^uFF00-uFFFF]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData( ‘text’).replace(/[^uFF00-uFFFF]/g,”))” 

用正則表達式限制只能輸入數字:onkeyup=”value=value.replace(/[^d]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’ ).replace(/[^d]/g,”))”

用正則表達式限制只能輸入數字和英文:onkeyup=”value=value.replace(/[W]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,c
lipboardData.getData(‘text ‘).replace(/[^d]/g,”))”

匹配中文字符的正則表達式: [\u4e00-\u9fa5]

匹配雙字節字符(包括漢字在內):[^\x00-\xff]

匹配空行的正則表達式:\n[\s| ]*\r

匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正則表達式:(^\s*)|(\s*$)

匹配IP地址的正則表達式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配網址URL的正則表達式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

sql語句:^(select|drop|delete|create|update|insert).*$

1、非負整數:^\d+$

2、正整數:^[0-9]*[1-9][0-9]*$

3、非正整數:^((-\d+)|(0+))$

4、負整數:^-[0-9]*[1-9][0-9]*$

5、整數:^-?\d+$

6、非負浮點數:^\d+(\.\d+)?$

7、正浮點數:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0- 9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

8、非正浮點數:^((-\d+\.\d+)?)|(0+(\.0+)?))$

9、負浮點數:^(-((正浮點數正則式)))$

10、英文字符串:^[A-Za-z]+$

11、英文大寫串:^[A-Z]+$

12、英文小寫串:^[a-z]+$

13、英文字符數字串:^[A-Za-z0-9]+$

14、英數字加下劃線串:^\w+$

15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’: +!]*([^<>\”\”])*$

17、郵政編碼:^[1-9]\d{5}$

18、中文:^[\u0391-\uFFE5]+$

19、電話號碼:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{ 2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

20、手機號碼:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$

21、雙字節字符(包括漢字在內):^\x00-\xff

22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函數)

23、匹配HTML標記:<(.*)>.*<\/\1>|<(.*) \/>

24、匹配空行:\n[\s| ]*\r

25、提取信息中的網絡鏈接:(h|H)(r|R)(e|E)(f|F) *= *(‘|”)?(\w|\\|\/|\. )+(‘|”| *|>)?

26、提取信息中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

27、提取信息中的圖片鏈接:(s|S)(r|R)(c|C) *= *(‘|”)?(\w|\\|\/|\.)+(‘| “| *|>)?

28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

33、提取信息中的浮點數(即小數):(-?\d*)\.?\d+

34、提取信息中的任何數字:(-?\d*)(\.\d+)?

35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)

36、電話區號:/^0\d{2,3}$/

38、帳號(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

 

[Android] 讓你開發的Android程式也支援APP2SD

device1.png   

一個程式開發成這樣感覺起來也很偉大吧,所謂的APP2SD

一點都不難

這是 Android 2.2 的特色,只要在開發程式時給一個設定值

Android 2.2的系統會自動跳出這個視窗,詢問使用者是否將程式裝在記憶卡上

節省手機上有限的空間

至於如何做搬移,這就是Android系統自己會去調配的事情

它不會全部將程式裝在記憶卡上,而會搬移大部分的資料到記憶卡上

只會留下必要的程式在手機的儲存空間

也就是大家所謂的APP2SD

 

大部分的討論串大多是在如何強制讓系統直接搬移程式

在這裡教你如何在程式開發的角度上,把這項功能也考量進去

 

對於遊戲….等大容量的程式,Android官方是比較推薦上述類型的程式裝在記憶卡上

 


 

開發需求

只要一個最低需求

Android 2.2 (API Level:8)

做為最低開發的目標程式標準

(當然手機也要隨著配合啦….)

 

—————————————————————

AndroidManifest.xml 中,在<manifest> </manifest>的標籤上

加入一個android:installLocation的參數,本例為"auto"

如以下所示:

<?xml version="1.0" encoding="utf-8"?>

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

      package="com.J_Test.TestProject"

      android:versionCode="1"

      android:versionName="1.0"

      android:installLocation="auto">

    <uses-sdk android:minSdkVersion="8"
/>

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".main"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>

—————————————————————

關於installLocation

關鍵的參數android:installLocation

有三種參數能使用

internalOnly  就是只能限制於在主記憶體中運作

auto 就是自動判斷

preferExternal  是希望能裝在記憶卡中(例如:遊戲….)

不是所有程式都使用auto讓程式判斷就好

 

 

Android官方也提到

有些類型的程式不應該使用APP2SD的

因為把資料裝在記憶卡需考量到

記憶卡如果無緣無故被退出,程式很有可能會當掉(crash)

當然,沒有該有安裝程式的那張記憶卡,程式不會在Android系統中出現icon

 

 

 

 

Services  程式有寫到服務,需要在系統中常駐運行的

Alarm Services 有使用定時提醒的服務,記憶卡退出代表無法正常提醒使用者

Input Method Engines  你開發的程式是做為輸入法的程式

Live Wallpapers 你開發的程式是做為定時換桌布的類型的

Live Folders  放在Android桌面上的動態文件夾,記憶卡被卸載時,該資料夾會暫時消失

App Widgets   你開發的程式是有提供桌面的插件的

Account Managers   程式有使用到Account Manager這個class元件的

Sync Adapters  程式有使用到AbstractThreadedSyncAdapter這個class元件的

Device Administrators  程式有使用到DeviceAdminReceiver這個元件的,做為系統管理類型的

Broadcast Receivers listening for "boot completed"  你的程式會隨著系統開機而會自動執行的,系統剛開機時

 

 

在是否搬移頁面的提示框按下是,出現該程式的詳細資訊

device2.png

按下移至USB儲存裝置

device3.png

就把資料移到記憶卡裡了,就成功了

 device4.png

官方網站說明

http://developer.android.com/guide/topics/manifest/manifest-element.html#install
 http://developer.android.com/guide/appendix/install-location.html

參考資料

http://www.pin5i.com/showtopic-android-2.2-apk-installlocation.html

[Android] Desire HD adb.exe android 2.3.3 crash

注意:這只是網友的ㄧ個小更新,要尋求正統android.com官方的更新

如果官方的更新沒辦法解決問題才來看這裡

 

會出問題的

機種: HTC Desire HD

ROM: Android 2.3.3  (核心版本: 2.36.405.8 RADIO:12.54.60.25_26.09.04.11_M2)

就是使用機器達人出的特調GRI40-2的ROM

http://gfans.bryan.tw/2011/05/05/1894

 

Android SDK r11 (目前最新的)

在Windows 7 x64仍然會出現問題

在Windows XP x32似乎已解決問題,但還是偶爾不穩定

 

Android SDK r10 是確定不管是x32還是x64都有相同的問題

 

Version: Helios Service Release 2
Build id: 20110301-1815

Android Development Toolkit (ADT)
Version: 10.0.1.v201103111512-110841

Dalvik Debug Monitor Service (DDMS)
Version: 10.0.1.v201103111512-110841

Android Debug Bridge version 1.0.26

 

————————————————————–

後來更新到Android SDK r12仍然有這個問題

 

可能就要服用adb patch

 

http://android.googlecode.com/issues/attachment?aid=8293722374312378755&name=adb.exe&token=f780c80896314348c1a12f980f1aa9b0

 

 

 

(google了一下)

類似問題適用

http://forum.xda-developers.com/archive/index.php/t-938593.html
http://stackoverflow.com/questions/5455553/adb-crashing-in-eclipse
http://stackoverflow.com/questions/4573019/adb-crashes-when-device-attached-with-eclipse
http://stackoverflow.com/questions/4573019/adb-crashes-when-device-attached-with-eclipse

 

參考網址

http://code.google.com/p/android/issues/detail?id=12141

[Android] debug不用線,用ADB連接3G/wifi手機

介紹一個很酷的功能無意間看到的

常用Eclipse的人都知道

不管是來開發程式的,還是知名部落客拿來截圖免root權限的

都會用到DDMS

 

通常要用連接USB傳輸線連接到實體手機

等待DDMS跳出你的手機之後才做下一步動作 (開發程式,截圖…等等)

 

這裡教你debug不用線,用3G或wifi直接無線Deploy程式

直接線上出Log

真的還蠻酷的

 

條件

曾經連接過USB做過設定的手機

 

設定方法

1.  先確定手機有電,3G或Wifi的網路有開

2.  用 USB 傳輸線接上你的手機

3.  找到Android SDK的路徑 platform-tools/ 資料夾路徑

(每個人裝位置因作業系統或個人喜好的都不太一樣)

以SDK r11為例,用32位元的Windows用exe版的安裝預設在

C:\Program Files\Android\android-sdk\platform-tools

 

4.  按Win key + R,在執行的視窗中打入 cmd

打入指令 (綠色的為指令,黑色的部分為說明)

C:\

cd C:\Program Files\Android\android-sdk\platform-tools

意思是切換資料夾到剛剛找的路徑

adb tcpip 5555 

意思是用tcpip連線,連接埠號5555做Debug伺服器

 

5.  然後就可以脫離USB連線了

在同一個地方再打入像是

adb connect 192.168.1.3:5555 

中間換成你手機的IP位址

意思是讓電腦使用網路連線到你的手機

 

6.  這時候你就可以用無線做操作了

你可以打 adb logcat 

就會動態傳輸手機的Log到畫面上 (按Ctrl+C結束)

 

打入adb devices,就會列出這個特別的裝置

List of devices attached
192.168.1.3:5555     device

就不會是類似

List of devices attached
SH11KRX10258    device

這樣

 

回到Eclipse上,DDMS已經出現這個特別的裝置了

————————————————————

還原回正常的USB傳輸線的模式,要打 adb usb

 

————————————————————

官方原文截錄

  1. 用 USB 傳輸線接上你的手機
  2. 到Android SDK的路徑 platform-tools/ 資料夾
  3. directory, enter adb tcpip 5555 at the command prompt.
  4. Enter adb connect <device-ip-address>:5555 You should now be connected to the Android-powered device and can issue the usual adb commands like adb logcat.
  5. To set your device to listen on USB, enter adb usb.

http://developer.android.com/guide/topics/usb/index.html

 

————————————————————

補充

Root手機的用戶有福了 🙂

可以不用像是上面這麼複雜喔

Google Market裡面有提供

類似這種Wifi ADB的這種軟體唷

只是需要Root………不知道這是啥的就跳過這段吧

 

adbWireless (Widget version)

https://market.android.com/details?id=siir.es.adbWireless

WiFi ADB

https://market.android.com/details?id=com.ttxapps.wifiadb

 

其中我最喜歡這套

ADB over WIFI Widget
Mehdy Bohlool

https://market.android.com/details?id=bohlool.net.wifiadb

他安裝完沒有甚麼變化和圖示

 

要去桌面 menu >  小工具

然後找到ADB over WIFI Widget

就會有個圖示在你的桌面摟

 

 

電腦這端用上述的

adb connect 192.168.1.3

(192.168.1.3是那隻上面看到的IP)

就可以連上去成為一個裝置摟

 

不用的時候就按一下小綠人就又回復正常摟

 

 

這樣就可以遠端桌面,遠端debug摟

是不是粉方便呢?

 

 

 

 

 

Desire HD 進入安全模式

不知道有沒有人跟我一樣

不小心進入HTC製作的安全模式?

 

進入方法如下

手機重開機,手機震動後

會出現白色畫面中綠色HTC字樣的畫面

這時,等待其載入到出現

小標題quietly brilliant的字樣

的附近

長按音量下鍵 (可以多按幾次,每次都長按即可)

如果成功進入的話,手機會震動一下

而且左下角會寫著安全模式

 

官方寫法是這樣

在安全模式中,所有協力廠商的應用程式都無法執行,所以您可以成功地啟動手機,以解除安裝最近安裝的應用程式,或可能導致手機無法正確啟動的應用程式。

我的解釋是,自行安裝的程式 (所有不是燒在Rom裡的程式),都無法執行

 

離開安全模式,只要重開機即可