發表文章

目前顯示的是 2013的文章

升級 SDK Tools & ADT 22.2 後無法創建新專案的解法

圖片
#此問題已經在 22.2.1 版被修正,請直接用SDK Manager更新即可。

又來了~
前幾天有升級 SDK Tools & ADT 到 22.2 的開發者,應該會發現怎麼無法建立新專案了?
當建立新專案到最後一步時,會出現下面這個畫面:


Unsupported template dependency: Upgrade your Android Eclipse plugin

This template depends on the Android Support library which is either not installed or the template depends on a more recent version than the one you have installed.
Required version:
Installed version: 18

真是令人摸不著頭緒,不是才剛更新的嗎...
而且不管按 Install/Upgrade 或 Check Again 都沒效

查了一下,又有人包了。
https://code.google.com/p/android/issues/detail?id=60149#c55
不過他也提供了解決方案,只要用上面連結中#55樓提供的 activities.zip 壓縮檔,解開後置換掉 sdk/tools/templates/activities 目錄就可以了!

使用<uses-feature>的注意事項

<uses-feature>最早是在Android 1.6 SDK (API Level 4)中出現的,他的用途是用來宣告App會使用到哪些軟硬體功能(比如Camera、Bluetooth、OpenGL ES version...)。不過事實上系統本身並不會去檢查這些設定,但Google Play確會用這些設定去過濾要呈現哪些App給使用者。

比如說我宣告了下面這行,表示我會使用到Camera功能。這樣Google Play就不會將我的App顯示在沒有Camera的裝置上。
<uses-feature android:name="android.hardware.camera" /> 不過後來在Android 2.0 SDK (API Level 5)中,<uses-feature>多了一個屬性叫android:required。當某功能在App中是必要時需設定為true,若是非必要時則設成false。咦?...若是不需要的話,我直接省略<uses-feature>不是更省事嗎?

在看完落落長的開發者文件後才瞭解,嚴格來說,每個App都應該要清楚宣告哪些功能是必要或非必要。但因為種種原因,開發者可能忽略或未正確宣告。所以Google Play除了檢查<uses-feature>外,還會參考<uses-permission>的設定。當有設定<uses-permission>時,Google Play會假定相關的功能是必要的,並加入過濾。

舉例來說,我的App會使用到Camera,但不是必要的。為此我宣告了Camera的<uses-permission>,卻忽略了<uses-feature>。
<uses-permission android:name="android.permission.CAMERA" /> 此時Google Play發現了這個<uses-permission>,便會將Camera視為必要而進行過濾,沒有Camera的裝置就看不到我的App了,這樣跟我想要的結果不同。

該怎麼改善呢? 只要加上Camera的<uses-feature>,並把android:re…

在 Eclipse 中將 Android SDK Tools 與 ADT 降回舊版的方法

圖片
一般來說新版本都會解決舊版的 Bug 或添加新功能,但有時新功能尚未穩定前反而會產生原先沒有的問題。而當 Android SDK Tools 與 ADT 發生這種狀況時該如何將它們降回舊版呢? 可以參考以下的做法:
(環境 Windows 7 + Eclipse Juno SR2)

Android SDK Tools的部分
1. 到您的 Android SDK 路徑底下,把 tools 與 platform-tools 刪除(或更改名稱)。
2. 參考 這邊 的資料,決定你想回復的版本。
3. 接著到下面的連結下載 SDK Tools (底下以 r21.1 為例,請自行修改欲下載的版本號)
http://dl-ssl.google.com/android/repository/tools_r21.1-windows.zip
4. 將步驟3下載的壓縮檔解開到 Android SDK 路徑底下。
5. 開啟 Eclipse 並打開 Android SDK Manager,可以發現 Android SDK Tools 版本已經降回 21.1。
(Android SDK Platform-tools 可能需要重安裝,直接透過 Android SDK Manager 安裝即可。)


ADT的部分
1. 開啟 Eclipse -> Help -> Eclipse Marketplace -> Installed,把 Android Development Tools for Eclipse 選擇 Uninstall -> Finish。

2. 參考 這邊 的資料,決定你想回復的版本。
3. 接著到下面的連結下載 ADT (底下以 r21.1.0 為例,請自行修改欲下載的版本號)
http://dl.google.com/android/ADT-21.1.0.zip
4. Eclipse -> Help -> Install New Software -> Add -> Archive -> 選擇步驟3下載的壓縮檔安裝即可。
5. 安裝完畢,Eclipse -> Help -> About Eclipse -> 選擇 Android 相關圖示,可以發現 ADT 版本已經降回 21.1.0。

Android Studio 在滑鼠移動到函式時顯示說明

圖片
在 Android Studio 裡要看函式說明可以點選了函式之後按 Ctrl+Q,而要像 Eclipse 一樣當滑鼠移動到函式時自動顯示的話則必須另外設定:
1. 開啟 Settings (Ctrl+Alt+S)
2. 選擇 IDE Settings -> Editor
3. 在 Other 勾選 Show quick doc on mouse move 即可(並可以設定滑鼠停留多久才顯示說明)。

Android Studio 如何調整字型大小

圖片
Android Studio版本:1.5

1. 開啟設定頁 (Mac: Android Studio -> Preferences) (Windows: File -> Settings)
2. 選擇 Editor -> Colors & Fonts -> Font
3. 可以看到有兩個預設的 Scheme (Default & Darcula),但此時這邊的 Size 跟 Font 都無法調整。請先點選 Save As... 建立一個你自己 Scheme,輸入自訂名稱後按 OK。


4. 此時 Scheme 會變為你剛建立的,而 Size 跟 Font 也都可以調整了^^

安裝 Android Studio 的注意事項

圖片
安裝 Android Studio 要注意以下幾點:

1. Java 路徑問題。這個問題官網也有提到,在安裝 Android Studio 前除了要先安裝 JDK 之外,還必須新增一個環境變數。
Windows 環境下的新增方法:
開始 -> 電腦 -> 系統內容 -> 進階系統設定 -> 進階分頁-> 環境變數
系統變數 -> 新增,變數名稱 JAVA_HOME,變數值為你電腦中 JDK 的安裝路徑,比如 C:\Program Files\Java\jdk1.7.0_21。


2. Android Studio 本身的安裝路徑不能有空格,否則之後執行 SDK Manager 或 AVD Manager 會出現下圖的錯誤。

Android Studio 無法在實機上 Run/Debug 程式?

圖片
剛開始使用 Android Studio 總有些水土不服,遇到的其中一個問題是要 Run/Debug 程式時,總是跳出要我建立虛擬裝置(Emulator)的畫面:


可是我明明有接實機,DDMS 裡也有抓到ㄚ?
看了一下設定,原來在 Run/Debug Configurations 裡的 Target Device 預設是 Emulator。所以只要修改一下就好。

步驟如下:
1. Run -> Edit Configurations...
2. 選擇你的專案
3. 將 General 分頁中的 Target Device 改成 USB device 或 Show chooser dialog 即可


此外,你也可以從 Android Studio 的 Quick Start 畫面中選擇 Configure -> Project Defaults -> Run Configurations,然後修改其中 Android Application 的預設設定,這樣以後 Create 或 Import Project 時就會自動套用了。

ProGuard 與 AdMob SDK 的問題

其實這是好久以前的問題了,但 AdMob SDK 改版多次也沒有改善,所以還是記錄一下以供備忘。

當你的 App 使用 AdMob SDK 6.2.0 或之後的版本,在 Expore Signed APK 時 ProGuard 可能會出現以下的錯誤(內容可能依 AdMob SDK 版本而異):

Proguard returned with error code 1. See console Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState You should check if you need to specify additional program jars. Warning: there were 2 unresolved references to classes or interfaces. You may need to specify additional library jars (using '-libraryjars'). java.io.IOException: Please correct the above warnings first. at proguard.Initializer.execute(Initializer.java:321) at proguard.ProGuard.initialize(ProGuard.java:211) at proguard.ProGuard.execute(ProGuard.java:86) at proguard.ProGuard.main(ProGuard.java:492)

一開始試著在 proguard-project.txt 裡加上 -keep class com.google.ads.** {*;},但沒有效果。之後上 Google Groups 詢問才有位 Googler 回說可以忽略這些 Warning,因此只要在 proguar…

Proguard returned with error code 1 (Unexpected end of ZLIB input stream) 的奇怪問題

今天更新了 ADT 22.0.0 後,除了發生 NoClassDefFoundError 的錯誤之外,還遇到另一個奇怪的問題。
某個專案在 Export Signed APK 時,Proguard 會出現下面這個錯誤:

Proguard returned with error code 1. See console
java.io.IOException: Can't read [E:\android-work2\ActionBarSherlock-4.2.0\library\bin\actionbarsherlock-4.2.0.jar] (Can't process class [com/actionbarsherlock/widget/SearchView$3.class] (Unexpected end of ZLIB input stream))
at proguard.InputReader.readInput(InputReader.java:230)
at proguard.InputReader.readInput(InputReader.java:200)
at proguard.InputReader.readInput(InputReader.java:178)
at proguard.InputReader.execute(InputReader.java:78)
at proguard.ProGuard.readInput(ProGuard.java:196)
at proguard.ProGuard.execute(ProGuard.java:78)
at proguard.ProGuard.main(ProGuard.java:492)
Caused by: java.io.IOException: Can't process class [com/actionbarsherlock/widget/SearchView$3.class] (Unexpected end of ZLIB input stream)
at proguard.io.ClassReader.read(ClassReader.java:112)
at proguard.io.FilteredDataEntryReader.read(Fil…

升級 ADT 22 後專案出現 NoClassDefFoundError 錯誤的解法

圖片
Google I/O 13 開始的同時,ADT & SDK Tools 也同步更新了。但不幸的是將 ADT 升級到 22.0.0 之後,好幾個原本正常的專案又出問題了...想想這種事情以前也發生過

查了一下,也有人遇到類似的情況,解法如下:
1. 開啟專案設定頁面(右鍵點選專案然後選擇 "Properities",或用鍵盤 "Alt + Enter" )
2. 選擇 "Java Build Path"
3. 選擇 "Order and Export"分頁
4. 勾選 "Android Private Libraries"


5. Clean 專案並重新編譯執行應該就行了

PS.建議是檢查你所有的專案,並一次調整好。包含所有的 library project (比如ActionBarSherlock),也必須做這樣的動作。

最後只能再說一次 ADT 你好樣的!

參考連結:
https://plus.google.com/109801186705736971269/posts/dg2M1xM5Mv4
https://plus.google.com/u/0/117122118961369445953/posts/CzoG9tRTJFT
http://commonsware.com/blog/2013/05/23/do-not-manually-modify-eclipse-build-path-except-now-r22.html

《News》Google Play 重新開放台灣地區付費下載!

圖片
2013/2/27 是一個值得紀念的日子,台灣開發者&消費者超過一年半的苦難終於在這天結束!
無論是手機版或網頁版的 Google Play,大家應該都能看到付費 App 了!



不過目前能看到的付費 App 數量還不多,因為 Developer console 的"發佈選項"裡台灣雖然不再被槓掉,但預設是未勾選的狀態,開發者要自己去勾,然後再等幾個小時,App 才會出現在台灣地區的市集。台灣開發者應該都會迫不及待的去勾選,但國外的開發者會不會注意到就很難講了。希望 Google 能發信給所有開發者,讓大家都能知道這個訊息。


同時也希望過時的法條能盡快修正,迂腐的官員也不要再來亂! 拜託! 說真的,我們不求政府能幫什麼忙,只求別幫倒忙就好。 畢竟對開發者來說,黃金時期被搓掉已經很受傷了!
其他資料: Google Play 英文 Help 網頁中,台灣已被加回支援付費下載的國家(Feb 26, 2013) https://support.google.com/googleplay/android-developer/answer/138294?hl=en&ref_topic=2365624

Chrome plugin - Android SDK Reference Search

圖片
Android SDK Reference Search (點此安裝) 是一個設計給Android開發者使用的Chrome plugin,它主要有兩個功能:

1.在Chrome網址列輸入 ad+空格+關鍵字,就會自動列出與關鍵字相關的類別,並可以直接帶你到Android SDK Reference中該類別的頁面。


2.在Android SDK Reference的類別名稱旁增加了一個 (view source) 連結,可以直接帶你到Android Git Source觀看該類別的原始碼。


使用起來相當方便,推薦給各位Android開發者們。

設定Google Play Payments與Adsense的電匯付款銀行

圖片
有上架App到Google Play營利的開發者最關心的就是如何收取款項了。
目前付費App與In-app Billing的收益是透過Google Play Payments直接電匯到開發者的銀行帳戶。而Admob廣告收益則是由Adsense透過支票,電匯或西聯匯款給開發者。

這篇介紹如何設定電匯付款銀行的部份。
首先登入Google Play Console或Adsense,接著到付款設定新增電匯付款,會看到一些欄位需要填寫:


欄位說明:
帳戶所有人名稱:請填入你的英文譯名,建議跟護照上一樣,方便行員辨識。千萬不要填John、David、Mary這種喔。銀行名稱:請填入銀行英文名稱,我是在臺銀南港分行開的戶,我就填BANK OF TAIWAN Nan Kang Branch。SWIFT-BIC(電匯代碼):請填入銀行的電匯代碼,可以詢問你的開戶銀行或在這邊查詢。我是直接去分行問的,通常銀行會準備一張類似下面這種小紙條給你,上面就有所需資訊。 帳號:請填入你的銀行帳號。這裡填台幣或外幣帳戶都可以,填台幣帳戶的話銀行會在收到款項時直接幫你依當天匯率轉存為台幣。我自己是填外幣帳戶,想說可以等匯率比較好的時候再轉換。
填妥後送出驗證就可以每個月等著收錢啦!(前提是要有達到最低付款金額USD $100)。另外要注意的是匯入匯款可能會有手續費產生(包含本地銀行及中轉銀行),依銀行不同,金額也有所差異。

以臺銀為例,不管你是匯到台幣或外幣帳戶,每筆會收至少200台幣的手續費。
以我自己的經驗來說,用臺銀收款1200美元,本地加中轉總共被扣了大概14美元。
希望以上資訊能幫到大家,感謝 :-)

參考資料:
http://support.google.com/googleplay/android-developer/bin/answer.py?hl=zh-Hant&answer=2700656
http://dada.tw/2014/03/03/677/
http://weisue.pixnet.net/blog/post/30006232
http://www.bot.com.tw/ebc/ebcboard/qnadetail.aspx?no=307#匯入匯款