Friday, October 14, 2011

一個Eclipse匯入Android變紅XX的錯誤

案子在匯入後會變成紅色方型XX,
有非常多的理由。
通常我們都要在第1時間去看Console視窗裡寫些什麼錯誤訊息。


今天在匯入案子進筆電時,
發生了一個錯誤︰

[2011-10-15 14:25:00 - JeremyLiu] Dx
trouble processing "java/nio/CharBuffer.class":

Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.

This is often due to inadvertently including a core library file
in your application's project, when using an IDE (such as
Eclipse). If you are sure you're not intentionally defining a
core class, then this is the most likely explanation of what's
going on.

However, you might actually be trying to define a class in a core
namespace, the source of which you may have taken, for example,
from a non-Android virtual machine project. This will most
assuredly not work. At a minimum, it jeopardizes the
compatibility of your app with future versions of the platform.
It is also often of questionable legality.

If you really intend to build a core library -- which is only
appropriate as part of creating a full virtual machine
distribution, as opposed to compiling an application -- then use
the "--core-library" option to suppress this error message.

If you go ahead and use "--core-library" but are in fact
building an application, then be forewarned that your application
will still fail to build or run, at some point. Please be
prepared for angry customers who find, for example, that your
application ceases to function once they upgrade their operating
system. You will be to blame for this problem.

If you are legitimately using some code that happens to be in a
core package, then the easiest safe alternative you have is to
repackage that code. That is, move the classes in question into
your own package namespace. This means that they will never be in
conflict with core system classes. JarJar is a tool that may help
you in this endeavor. If you find that you cannot do this, then
that is an indication that the path you are on will ultimately
lead to pain, suffering, grief, and lamentation.

[2011-10-15 14:25:00 - JeremyLiu] Dx 1 error; aborting
[2011-10-15 14:25:00 - JeremyLiu] Conversion to Dalvik format failed with error 1

後來查了一下國外的論壇,才發現是專案在匯入Android的Jar檔時,Library Build錯位置了。

整個關鍵在於︰

 解決方式︰
Library標籤下應該會有一個android.jar(沒有放在Android2.2目錄下) ,
將其刪除,
並再將Android2.2Library匯入即可。





Wednesday, October 12, 2011

作品上新聞了

前一陣子接了一個外部合作案,
是三商美邦的「樂減碳小幫手」。

本來一開始是覺得產品規格不算多,
所以邊做邊重構。

但做到最後一天,
由於資料庫還不太熟,
加上伺服器端的程式又一直在修改,
一直熬夜到早上五點才完成這個案子。

不過看到新聞稿還蠻開心的。(笑)



相關連結︰

三商美邦人壽 綠色保險計劃探訪台灣人碳足跡

全台首創APP 保護地球少碳氣

三商美邦人壽啟動綠色保險計畫

三商美邦人壽推APP碳足跡記錄器

調查/台灣每人每日碳足跡19.6公斤 主管比職員多25%

減少碳排量 從日常生活做起

台灣人每天排碳19.6公斤 超過聯合國標準4倍

 

使用Proguard和Vpon時廣告出不來

今天遇見一個技術問題︰

即使在已匯入Vpon JAR檔的狀況下,
在做Proguard(程式碼模糊混淆)產出程式,
Vpon仍會顯示沒有正確的Adapter接收廣告
造成廣告無法正常顯示的問題。

出錯的LOG如下︰

Caught an exception in adapter:
java.lang.Exception: Invalid adapter
    at com.adwhirl.a.a.a(Unknown Source)
    at com.adwhirl.AdWhirlLayout.d(Unknown Source)
    at com.adwhirl.b.run(Unknown Source)

這個問題後來我發現︰
如果直接使用debug模式輸出程式時,
Vpon廣告是能顯示的。
原來是被Proguard混淆時,
打亂了廣告接收器(Adapter)。

解決方法︰
在Proguard腳本(proguard.cfg)中加入以下程式碼
-dontwarn com.vpon.**
-dontwarn javadoc.**
-dontwarn properties.**
-dontwarn com.adwhirl.**
-keep class com.vpon.** { *; }
-keep class javadoc.** { *; }
-keep class properties.** { *; }
-keep class com.adwhirl.** { *; }
 

上面這些是adOn.jar和adwhirl.jar裡所有的套件名稱,
在劇本裡下這些指令就能跳過混淆這2組jar檔,
讓廣告順利產出。

相關文章︰


Facebook.authroize()認證一片空白的問題

今天在做Facebook.authroize()時,
要驗証時一直出現全空白的畫面,
然後告訴我︰連結的(FB)應用程式出錯,
導致一直無法正常登入FB。

後來發現這是Facebook SSO(Single-Sign-On)單一登入機制的問題,
只要在程式碼中加入強制另外登入機制即可。

facebook.authorize(Activity, new String[] {"publish_stream" },Facebook.FORCE_DIALOG_AUTH,
        new Facebook.DialogListener() {});

這樣子Facebook就不會在你的應用程式被後跑SSO機制,
導制認證出錯了。

Tuesday, October 11, 2011

感謝大家對我第1隻程式︰統一發票愛我的支持

今天蠻感動的,
雖然這是技術論壇,
但我覺得還是可以把一點點心情寫在這裡。
因為布落格是我的
XD

Android的硬體規格問題,
雖然在開發過程中我罵歸罵,
但是今天收到使用者寄信來問我為什麼找不到我之前開發的
統一發票愛我」?
(因為已經陸續收到7封信了。)
這隻程式半年累計1萬下載人次,100人4.5顆星以上好評果真不是蓋的

這隻程式因為版權是前公司所有,
所以我已經不方便更新和維護了。

但當收到大家對這隻程式的關心和詢問,
我想我當初絞盡腦汁的用心,
使用者真的感受到了。

Tuesday, September 27, 2011

Android開發者應有的認知

Android開發之氣死人之路I開發氣死人之路II後,
在這裡跟許多後輩提及一個很重要的觀念。

許多開發者都喜歡拿Android跟iPhone比。
的確,在iPhone上開發APP,
因為手機規格就那麼一隻,
所以在程式開發上,
會遇到的問題不會如Android多。
甚至在畫面的佈局上,
即使用訂死(如︰絕對座標,譬如規定要將按鈕放在x=20,y=30)的方式,
使用滑鼠拖曳,輕鬆就能搞定版面佈局這件事。

但這件事在Android上可就大不相同了。
Android是多種規格、多種解析度、多種cpu運算、
多種記憶體結合起來的產物。
這都歸功於Android平臺的開放性。

Android光是在解析度上,
就分成手機型的
854*480/800*480/480*320/320*240
而平板就更不用説了
又是另一套規格。
詳細規格可以參照官方sdk的規格表
(但有許多規格還沒有列進來)

像最近開發的一個遊戲︰
挑戰劉子千

在這款遊戲裡,
女主角的眼睛會眨、按了上方的水晶燈蠟蠋會變亮、桌子要在螢幕的正下方。
再回到我剛才提到Android多解析度的問題。
這時候你看一下原本的遊戲畫面,會變成什麼樣子
看出來了嗎?
原本規劃好的位置,
因為各家解析度不同,
通通亂掉了。
也就是説,
遊戲廠商如果要替每一隻不同規格的Android手機做出可以玩的畫面,
那麼他們要替這款遊戲調校非常多的遊戲畫面版本。

剛才我們提到的是解析度的問題,
再來,我們來提硬體問題。
這款挑戰劉子千有一個「比對玩家音準」的功能,
當中使用了Android的錄音功能。
而聲音取漾率和CPU運算效能有關。
也就是説,
如果是機王Samsung SII,
10秒鐘能取漾到30筆玩家的音頻,
那麼在cpu運算效能較慢的機種裡,
可能10秒只能取到15筆音頻。

這樣的硬體差距,
也讓我在攢寫判斷玩家音準這個功能上,
遇到了許多的頻頸。
因為越多取漾率,
在判斷玩家音準這件事,
就會越準。

以上這款遊戲是我自己的案子,
所以能在這邊跟大家解釋Android發生了什麼事。
如果還要提我在公司上班裡開發的案子,
那硬體問題的例子將會不枚盛舉。

有些iPhone開發者當初就體認了這一點詬病,
所以打死不碰Android開發。
但是對Android開發者而言,
為了要能夠開發出多款手機都能正常運行的程式碼,
我學到了要對記憶體的使用更注意,
也學到了如何讓程式開發起來更有「彈性」。
我想這些經驗,
應該是直接去碰iPhone的開發者,
不會遇到的事情。

結論︰

1.如果你現在的身份是使用者,
請珍惜這些開發Android的人,
如果有廣告也請多多幫忙點擊,
因為Android使用者願意付費的比例比iPhone使用者低很多,
有你們的點擊,
我們開發者真的才有進步的動力,
也才會有經費開發出新版本讓你們繼續使用。

2.如果你現在的身份是開發者,
那我想告訴你,
雖然Android初期的開發門檻很低,
但到後來你為了要能讓所有硬體可以順利跑你的程式,
你還是會花上一些錢買不同的手機。
(當然也可以借用社會力量)
而且你會遇到比我文章裡提到的還要更多的問題。

,準備好當一名倍受挑戰的Android開發人員了嗎?



Monday, September 26, 2011

換個版面,換個心情(更換Eclipse版面)

你是底下這種人嗎?

1.Android開發的那麼久,
許許多多的問題也一天一天的累積了起來。
覺得很「阿雜(臺語)」?

2.長時間工作白底黑字的Eclipse環境讓你的眼睛吃不消?

這時候,
換個版面,
也許更能增加你的工作情趣哦!

Eclipse Color Themes裡,
提供了許多種的版面主題,
只要你喜歡,
通通可以下載來使用。

首先,
點選你要的主題


然後,
將EPF檔下載下來︰


最後,
在Eclipse中匯入該檔
[File]-->[Import]-->[Gerneral]-->[Preferences]




這時候畫面主題就會是你匯入的樣子了。

嗯,
感覺又換了另一種開發心情。
(自我安慰中⋯)

附上一個我習慣用的主題Sunburst - by Viorel Craescu - Website


Wednesday, September 21, 2011

如何安裝Tomcat至Amazon EC2

上一篇教了如何安裝Java JDK6至Amazon EC2後,
這篇繼續説明如何安裝Tomcat至EC2裡。

一、下載Tomcat
1.先到Tomcat官網找最新的版本,目前是7.0版
2.找出目前的下載連結網址並複製至剪貼簿

3.在Terminal打上$wget + 滑鼠右鍵貼上剛剛找到的最新網址
所以這行指令可能就變成︰
wget http://ftp.asia.edu.tw/ftp/Apache/tomcat/tomcat-7/v7.0.21/bin/apache-tomcat-7.0.21.tar.gz


按下Enter,等著下載吧!


這是下載完成後的畫面




二、安裝Tomcat
下載完後,
你可以選擇要安裝的位置,
假設我要將這個tomcat安裝檔移至
/usr/local/tomcat/目錄下,
那麼我就下這行指令︰
$mkdir /usr/local/tomcat/
這樣子就建立了tomcat目錄了

然後,下搬移指令
$mv apache-tomcat-7.0.21.tar.gz /usr/local/tomcat/
將檔案移去那裡,


最後,我們在這個位置安裝tomcat
ubuntu@ip-10-172-155-204:/usr/local/tomcat$ tar xvzf apache-tomcat-7.0.21.tar.gz

這時候就會開始安裝Tomcat了。


記得要將EC2的secutiry group多設一個8080埠出來(目的是將8080排除於防火牆外),
到時候才能連到Tomcat哦!


三、啟動Tomcat

ubuntu@ip-10-172-155-204:/usr/local/tomcat/apache-tomcat-7.0.21/bin$
底下,
打上
./startup.sh
這時候Tomcat就啟動了!



ip位址會顯示在這裡︰


只要在瀏覽器上,
打上http://50.18.0.217:8080
Tomcat連上囉!

透過Terminal安裝JDK6至Amazon EC2

上一篇説明了如何透過Terminal連線至Amazon website(AWS)後,
接下來便要説明如何開始安裝JDK了。

指令相當簡單︰
$sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$sudo apt-get update
$apt-get install sun-java6-jdk
 
然後,就可以下
$java -version
看看安裝是否成功了。
 
如上圖,這樣子就代表成功了。
 
下一篇︰如何安裝Tomcat至Amazon EC2

用Terminal連線到亞馬遜伺服器EC2

以目前的Android應用軟體來説,
已經越來越多的服務使用到後端伺服器來提供更良好的應用程式服務,
但是,小本經營的我們,
一方面又要節省成本,
這時候你會怎麼做呢?
亞馬遜website(AWS)是最近很火紅的網路伺服器,
很多企業為了省成本,
都會在將伺服器掛在上面,
加上AWS很高的資料移動性,
AWS簡直就是中小企業的最佳選擇。

這篇文章即將教你︰
如何連線到Amazon的伺服器,
如果你想要對AWS有一些基本的認識,
可以先參考阿正老師教你免費玩Amazon EC2雲端主機(下篇):主機實戰篇


文章開始︰

今天研究了一下要怎麼使用AWS,
我建立了一個Instances,系統選用Ubuntu 10.4。
然後,


這時候會出現一個新的視窗︰


只要在終端機terminal輸入這一行,
就能連到亞馬遜雲端了。

註︰可能輸入過程中,
會發生pem這個ssh私鑰還處於公開的訊息。
請照著這個視窗的第3點教學,
將私鑰權限改成private。

連線成功後,會出現這個畫面︰
恭喜你,連線成功啦!

下一篇︰如何安裝JDK6至EC2

Monday, September 19, 2011

Admob的另一個選擇︰Vpon

相信很多開發者都知道Admob是做什麼的,
這幾天我一直在研究另一家廣告公司︰Vpon


Vpon如同Admob,
只不過他們的獲利方式,
不只Admob的點擊賺回饋金。
就算是顯示出廣告,
都還是有一定的分潤機制,
只是比點擊的分潤還低。

Vpon目前做地域性的廣告市場,
也就是説,如果你的客戶在台灣或大陸,
那麼Vpon可能是一個不錯的選擇,
如果你的市場在外國,
那你⋯還是乖乖用Admob吧⋯

Vpon除了做自家的廣告(Vpon_TW、Vpon_CN)外,
他們還引用了Google的Adwhirl工具,
此工具能將各家的廣告,
通通串連起來。
以後不管要播放Vpon、Admob、iAd⋯
等等之類的廣告,
你只要透過Adwhirl後端,
便可以對這些廣告做投放率的控管。

註︰
這個Adwhirl是Vpon的Adwhirl
而不是Google原本的Adwhirl,
如果你是註冊Google的Adwhirl,
你就會跟我一樣卡在這裡一天,
收到廣告回傳的Log的Jason是空的狀況。

以下是Vpon提供Adwhirl對各大廣告商的關係圖

在這裡我直接以eclipse來説明如何將這些東西做串接。
1.你必須將各家的廣告jar檔放入你的eclipse中。
這樣看下來,如果你要用Admob、Vpon_TW、Vpon_CN、Adsense,
你至少要引入三家廣告商的jar檔
(Adsense因為可以直接在Admob後臺做設定,
所以不用再引入Adsense相關的jar檔了)

2.在你專案的src目錄裡,要加入相對應的Adapter去迎接第3方的廣告。
這些第3方廣告的Adapter在Vpon with Adwhirl sdk檔案裡都能找的到,
他們都已經寫好了︰
Vpon_tw和Vpon_cn的Adapter,他們寫在jar裡了,
但Admob的廣告,要另外將Adapter丟出來做串接(如下圖),
否則從Admob傳來的廣告,Vpon_Adwhirl會不知道如何回應。
註︰這個地方因為不知道要再銜接一個Adapter出來接Admob,
Log因而回傳Invalid Adapter, 
又讓我卡一天。

3.在Androidmenifest.xml裡,你要宣告︰

 
 
 
 
然後再宣告2個Activity進來︰

 

 
註︰AdActivity因為沒有宣告在AndroidMenifest.xml裡,
在這邊我卡了2天。

4.在你的畫面裡留出一個位置準備放廣告,
根據Vpon官方的説法,
這個廣告只適用在320x240(註2)/480x320/800x480/854x480
Android2.2以上版本

註︰
2011-09-19
1.官方説明Vpon能用在Android1.6、2.1、2.2,
但當我在用Proguard編譯時,
卻告訴我需要一個Android2.2的元件才能export成功。
Warning: com.vpon.adon.android.WebInAppWebChromeClient: can't find referenced class android.webkit.ConsoleMessage
這裡我又卡上半天。
也同時告訴我們編譯環境最好設在Android2.2以上。

2011-09-22
如上,雖然要2.2的環境才能export出apk檔,
但如果AndroidMenifest.xml裡的min SDK version設成7(2.1),
然後export,
Vpon廣告仍然是可以顯示出來的。

2.經測試320x240也能顯示Vpon廣告 

5.程式碼中加上︰
/**
  * 添加Vpon with Adwhirl廣告
  */
 private void callAdvertisement() {
  FrameLayout prepareAdvertisement_layout = (FrameLayout)findViewById(R.id.adLayout);//adLayout是你事先預留的廣告位置
  
  AdWhirlLayout adWhirlLayout = new AdWhirlLayout(this, "你跟Adwhirl要到的sdk key");
  
  AdWhirlManager.setConfigExpireTimeout(1000 * 60); 
  AdWhirlTargeting.setAge(23);
         AdWhirlTargeting.setGender(AdWhirlTargeting.Gender.MALE);
         AdWhirlTargeting.setKeywords("online games gaming");
         AdWhirlTargeting.setPostalCode("94123");
         AdWhirlTargeting.setTestMode(false); 
         
     adWhirlLayout.setAdWhirlInterface(new AdWhirlInterface(){

   @Override
   public void adWhirlGeneric() {
    Log.e(AdWhirlUtil.ADWHIRL, "In adWhirlGeneric()");
   } 
     });
      
     prepareAdvertisement_layout.addView(adWhirlLayout);   
    
 }

6.各家的廣告License key,像是Admob、Vpon_TW、Vpon_CN⋯
通通在Vpon的Adwhirl後臺裡去輸入和統一管理

Vpon分出了TW和CN兩個平臺,
如果你同一隻應用程式要做地域性的廣告
(涵蓋臺灣和大陸市場),
那麼在兩個平臺內,
你必須各申請1組Vpon key,
登錄在Vpon Adwhirl後臺裡。
(見上圖)

剩下的廣告如何顯示這件事,通通交給Vpon_Adwhirl吧!

相關文章︰使用Proguard和Vpon時廣告出不來

Wednesday, August 24, 2011

判別使用者的裝置版本

有時候在寫code的時候,
會遇到有些舊的類別在新版已不推薦使用,
因為新版推出了更好的功能。

產品經理(PM)在此時又要求2種功能都存留,
這時候下面這個判斷就變得很好用了。

if (android.os.Build.VERSION.SDK_INT >= 8){
   //在Android 2.2以上要用什麼類別
  }else{
   //在2.2以下又要怎麼處理同一個需求
  )
 

Thursday, August 18, 2011

Test in-app purchase測試你的內部應用程式購買機制

在使用測試in-app purchase時,
有以下幾點需注意︰
1.官方強調︰測試in-app purchase(以下簡稱iap)請勿使用模擬器!
2.如果你要測試的是預保留產品ID(reserved product IDs),那就不需要使用測試帳號。如︰android.test.purchased這組預設ID是讓你拿來測試購買後會發生哪些回傳值。
3.確認你裝置上的Android Market版本是否適合運行iap


真實測試你的iap物品
1.需要在軟體發佈網站裡記錄一組測試帳號

2.上傳的apk不需要被發佈,但是iap內的物品必須被發佈!
注意︰Android Market上面這個未發佈的apk的版本編號以及簽章(Signature)需以裝置上的版本一致
3.購買時帳目會真實被記進tester的Google checkout裡,
之後user跟開發者提出退費請求(可能寄e-mail或什麼的),
開發者就可以在Google Checkout Merchant account使用退費機制(refund)。

此時Google checkout會寄出該user已經退費的訊息給Android Market,
Android Market再寄出訊息給user手上的應用程式。
如果你的應用程式當初有寫收到退費的訊息時要做什麼處置,
那麼程式就會在這個時候開始動作。
譬如︰沒收紅藥水、魔法藥水。


4.請用釋出版本的signature,而非debug的signature
5.將一臺裝置的帳號設成測試帳號

  1. Open Settings on your device.打開裝置裡的設定
  2. Touch Privacy.點擊隱私設定
  3. Touch Factory data reset.點擊重設為原廠設定
  4. Touch Reset phone.點擊重設手機按鈕
Note: The only way to change the primary account on a device is to do a factory reset, making sure you log on with your primary account first.
將測試帳號設為主帳號的唯一方式,就是使用重設為原廠設定。
這樣做才能確保你是用主帳號登入Android Market

========實測結果=========
1.當你真的去買了iap內的東西,測試帳號裡的Google Checkout裡會有消費記錄
2.若馬上移除掉apk,這筆iap消費記錄也會馬上被退款(未免也太迅速了吧⋯)
3.若你要重新購買時,Android Market的iap視窗會回應你︰系統正在處理您的訂單,稍候幾分鐘即可取得您的商品。

4.後來,過了40分鐘,才能又購買這筆iap的產品

Saturday, August 13, 2011

in-app purchase匯入步驟

以下文章從Billing Android- implementing in-app billing取材整理


1.將Billing Sample src裡的com.android.vending.billing複製到你的專案裡
2.在AndroidManifest.xml裡的user-permission添加
com.android.vending.BILLING
註︰如果沒有宣告就請求billing機制時,將會收到
RESULT_DEVELOPER_ERRO反應

3. 建立BroadcastReceiver和Service(見步驟4)

BroadcastReceiver - 用來處理從Android Market傳來的Billing訊息 
Service - 綁剛才從billing sample src複製過來的IMarketBillingService.aidl

哦!對了。AndroidManifest.xml裡的BroadcastReceiver要設 intent filters 

      
        
        
        
      
    
4.攢寫Service
這個Service將要做哪些事?
(1)綁定IMarketBillingService.aidl
(2)向Android Market發佈Billing請求
  • CHECK_BILLING_SUPPORTED requests
  • REQUEST_PURCHASE requests
  • GET_PURCHASE_INFORMATION requests
  • CONFIRM_NOTIFICATIONS requests
  • RESTORE_TRANSACTIONS requests
(3)同步處理以上這些請求的回應


============================
(1)綁定IMarketBillingService.aidl詳細說明
  1. 建立一個Service並實作serviceConnection,然後將底下的Code放進OnCreate()
  2. try {
      boolean bindResult = mContext.bindService(
        new Intent("com.android.vending.billing.MarketBillingService.BIND"), this,
        Context.BIND_AUTO_CREATE);
      if (bindResult) {
        Log.i(TAG, "Service bind successful.");
      } else {
        Log.e(TAG, "Could not bind to the MarketBillingService.");
      }
    } catch (SecurityException e) {
      Log.e(TAG, "Security exception: " + e);
    }
     
  3.  建立callback(將以下程式碼貼進自創的Service裡)
  4. /**
      * The Android system calls this when we are connected to the MarketBillingService.
      */
      public void onServiceConnected(ComponentName name, IBinder service) {
        Log.i(TAG, "MarketBillingService connected.");
        mService = IMarketBillingService.Stub.asInterface(service);
      }
     
  5.  可以開始用mService去 sendBillingRequest()任何需求了!
 記得將developer發佈頁面裡的公開金鑰放進Security.java裡的base64EncodedPublicKey變數中

    Monday, August 8, 2011

    台灣購買Android軟體

    由於臺北市政府跟Google因軟體7天退費乙事正面交鋒中,
    但是還是有很多網友很支持開發者,
    想花錢去購買軟體。

    CJAY部落客有教我們怎麼將自已虛擬成外國用戶來購買Android Market的軟體,
    有興趣的看一看吧!

    步驟應該不會太難才是!

    2011/08/13註︰
    Market Enabler雖然能讓USER購買付費軟體,

    1.裝置需要ROOT
    2.仍然不能支援IN-APP-PURCHASE

    實測後只有依照CJAY教的方式,
    才能實現在台灣使用in-app-purchase付費

    2011/08/25 11:00註︰
    現在又變成Market Enabler可以使用IN-APP-PURCHASE,
    而CJAY的則不行⋯

    2011/08/25 15:50註︰
    現在Market Enalber和CJ的vpn都能用IN-APP-PURCHASE了

    天啊,台北市政府,還我乾淨的測試空間!
    話又說回來,為什麼要在這個時間點要求我做IN-APP-PURCHASE
    (踢)

    Monday, August 1, 2011

    Android proguard issue - Can't read [proguard.ClassPathEntry@1a0c10f] (No such file or directory)

    If you encounter the problem that can't read something when you proguard your program
    as title write:
    java.io.IOException: Can't read [proguard.ClassPathEntry@1a0c10f] (No such file or directory)

    There will be two things you have to do:

    1.Download the newest ProGuard version from official website, unzip all its' file in sub-directory and replace to your-andoird-sdk\tools\proguard\

    It'll appear the exactly path where you got issue.

    2.Export project again,
    Now it'll show the error is:
    java.io.IOException: Can't read [/Users/simon/Android/?q?HSDK/FET_SMarket_SDK/FET_APP_Store_SDK_2.3.0.jar] (No such file or directory)

    3.When I back to that directory, ?q?HSDK isn't my directory's name, the name actually is "電信SDK".
    Now, I got the answer that I can't use Chinese in my path, Otherwise I will get this problem.

    原來讓我卡住一天,不能發佈並混淆程式的原因是︰
    我用了中文目錄成為路徑,
    ProGuard不能辨認中文!

    上一篇︰

    關於程式碼混淆proguard

    相關文章︰