Android Market上發軟體要注意哪些問題

來源:互聯網
上載者:User

簡介:這是[Android底層開發]Android開發問題集錦,介紹了和java,有關的知識、技巧、經驗,和一些java源碼等。   


1、Android Market上發軟體要注意哪些問題
    很多網友可能都註冊了Android Market賬戶,但發布一款軟體如果要做到很周全需要考慮哪些問題呢?
(一)、相容性 
對於目前市面上Android裝置品牌種類定位繁多,這裡教程之家大致將這些分為幾類:  
(1). 按作業系統區分,Android 1.5,1.6和Android 2.0,2.1或2.2等幾個版本。  
(2). 按螢幕解析度區分,目前WVGA是主流即480×800目前佔了近一半,當然還有一部分HVGA的320×480大概有45%的份額,至於QVGA的一些低端機相對較少比如Moto ME511、HTC Tattoo、HTC Aria和HTC Bee這幾款機型還是240×320的解析度比較少。  
(3). 硬體或擴充庫,比如需要擴充包WiFi、GPS、GSM/GPRS模組、OpenGL 3D硬體加速器的。  
面對上面的三種問題,這裡eoe社區可以告訴大家一個簡單的方法來處理比如說直接在androidmanifest.xml中設定,這樣Google的Android Market就可以自適應了。面對以上問題,解決方案分別為  
(1). 重新設定use-sdk節點,比如僅僅讓android 2.0到2.1之間的使用者使用而2.2的使用者無法使用,可以設定為 其中中間數字代表API Level,而maxSdkVersion屬性在較早的SDK中不支援,可能ADT無法編譯通過。  
(2). 解析度我們可以添加supports-screens節點,比如相容hvga和wvga的,可以這樣寫 這裡small代表qvga,normal就是hvga,而large是wvga或fwvga,最後的密度還牽扯到LCD螢幕問題  
(3). 擴充庫,比如我們用到google maps包,或中移動的oms庫,可能需要 的字樣,當然硬體的問題還可以引入特性節點 比如 < android:glEsVersion=”0×00020000″>   
android:name=”android.hardware.camera” android:required=”true”/> 這裡就是我們的遊戲需要OpenGL ES 2.0的版本,如果需要2.1則值為0×00020001,需要更高的韌體才能支援,同時還必須要系統的網路攝影機硬體。  
詳細的教程之家在這裡給大家列出來:
android.hardware.camera.autofocus
android.hardware.camera.flash
android.hardware.sensor.light //光線感應器
android.software.live_wallpaper //動態壁紙
android.hardware.sensor.proximity 距離感應器
android.hardware.touchscreen.multitouch //多點觸控
android.hardware.telephony
android.hardware.telephony.cdma
android.hardware.telephony.gsm
(二)、軟體的隱私問題
盡量不要聲明過多危險的permission,比如需要訪問使用者資訊,連絡人、簡訊、通話記錄、定位資訊等等,對於一般的程式調試反饋,Google已經在Android 2.2的韌體中加入了自動反饋和自己程式的logcat stack print功能,可以在Android Market的console後台查看。


2.MATCH_PARENT是什麼類型的布局
    有網友表示對於很多工程中的MATCH_PARENT出現在layout中感到不明白,過去只有FILL_PARENT和WRAP_CONTENT那麼 match_parent到底是什麼類型呢? 其實從Android 2.2開始FILL_PARENT改名為MATCH_PARENT ,從APILevel為8開始我們可以直接用MATCH_PARENT來代替FILL_PARENT,最後教程之家提醒大家,他們的定義本質是一樣均為 -1,只是換了個別名,可能為了更準確些,比如最終在SDK中的定義為:
fill_parent   -1  The view should be as big as its parent (minus padding). This constant is
deprecated starting from API Level 8 and is replaced by match_parent.
match_parent   -1 The view should be as big as its parent (minus padding). Introduced in API Level 8.
wrap_content   -2  The view should be only big enough to enclose its content (plus padding).


3.Android分行符號變成方框的解決方案
    我們都知道Android是基於Linux核心的,在處理分行符號時使用的是\n而Windows伺服器處理分行符號為\r\n這樣的方式,對於顯示\r 即斷行符號符在Android上面可能就變成了黑色的方框或者說方塊,我們在Android的TextView或EditView等文本顯示控制項上將\r\n 替換成\n即可。


4.View的顯示狀態GONE,VISIBLE和INVISIBLE區別
    很多網友可能會發現View類的設定顯示狀態setVisibility方法有三種情況,分別為GONE、VISIBLE和INVISIBLE,它們之間到底有哪些區別呢? 教程之家給大家舉個簡單的例子。可能很多網友會發現有些Android應用的下麵包含了AdMob或Adsense廣告條,如果這個View 我們設定為GONE則消失,該廣告條看不見也不佔用位置。而INVISIBLE則代表廣告條那塊是空白,但仍然沾著他布局高和寬的位置,而VISIBLE 就是標準顯示時的狀態。


5.android單一實例運行方法
    我們都知道Android平台沒有工作管理員,而內部App維護者一個Activity historystack來實現視窗顯示和銷毀,對於常規從捷徑運行來看都是startActivity可能會使用FLAG_ACTIVITY_NEW_TASK標記來開啟一個新視窗,比如Launcher,所以考慮單任務的實現方法比較簡單,首先教程之家糾正下大家一種錯誤的方法就是直接在androidmanifest.xml的application節點中加入android:launchMode=”singleInstance”這句,其實這樣將不會起到任何作用,Apps內部維護的曆史棧作用於Activity,我們必須在activity節點中加入android:launchMode=”singleInstance” 這句才能保證單一實例,當然一般均加在主程式啟動視窗的Activity。

6.Droid2無法識別ADB問題解決方案

    目前來說Motorola Droid2手機無法識別ADB,雖然通過Moto內建的驅動安裝可以在Windows XP/7上安裝裝置驅動,但在Eclipse中可以看到DDMS的Device Manager無法識別,這問題問題以往也出現過,主要原因是你當前的ADT外掛程式版本太低,一般Google每次推出一個高版本的韌體,比如 Android 2.2則對於ADT外掛程式也將會升級使其一些特性將支援。


7.ListView和ScrollView同時使用Bug
    很多網友可能發現ListView或ScrollView這樣的組件放在一起套嵌會出現無法正常顯示的bug,比如典型的例子就是ScrollView 中包含的ListView只能顯示2行左右,而ListView中的資料肯定遠大於2個,這樣的問題教程之家推薦大家可以通過重寫ListView的onMeasure方法來重新設定控制項的顯示高度,在onMeasure中我們使用setMeasuredDimension方法重新設定控制項的顯示尺寸。同樣對於部分網友提到的水平滾動ListView仍然適用,當然可能還有一部分網友可能使用HorizontalScrollView來實現。


8.px像素如何轉為dip裝置獨立像素
    最近有網友問如何將px像素轉為dip獨立裝置像素,由於Android的裝置解析度眾多,目前主流的為wvga,而很多老的裝置為hvga甚至低端的qvga,對於相容性來說使用dip無非是比較方便的,由於他和解析度無關和螢幕的密度大小有關,所以推薦使用,不過這裡教程之家提示大家,ophoneos的手機對於dip的支援糟糕透了,顯示的結果會放大很多,同時黑色的主題會導致常規的黑色文字讓使用者無法分辨。   px= (int) (dip*density+0.5f) //這裡eoe社區提示大家很多網友擷取density的方法存在問題,從資源中擷取的是靜態定義的,一般為1.0對於HVGA是正好的,而對於wvga 這樣的應該從WindowsManager中擷取,WVGA為1.5


9.Android的Btimap處理大圖片解決方案
    我們都知道Android的Dalvik VM為一個應用提供了大約16MB的記憶體,一般我們處理超過8MB的圖片將會出現OutOfMemoryError異常,我們解碼一個圖片為了防止記憶體不足的異常我們可以使用BitmapFactory.Options 的udeinTempStorage屬性解決,代碼如下:

BitmapFactory.Options cwj = new BitmapFactory.Options();

cwj.inTempStorage = new byte[1024*1024*5]; //5MB的臨時儲存空間

Bitmap bm = BitmapFactory.decodeFile(inputStream,cwj); //這裡cwj為Options屬性


10.android下解析xml檔案遇到中文問題
    很多Android開發人員可能一直抱怨xml解析庫不夠完善,對於國內很多server並不是標準的utf-8編碼,遇到中文時可能解析器會停止或解析出來的是亂碼。這裡教程之家給大家說下常見的解決方案:
(一)、android sax庫遇到gbk或gb2312編碼時   

     

方法1. 可以顯示的指明編碼比如:
InputSource is = new InputSource(inputStream);    
is.setEncoding(“UTF-8″);   


方法2. 使用InputStreamReader轉換   
在SDK中可以查看有這樣執行個體化方法,參數二為字元集 InputStreamReader(InputStream in,Charset charset)

具體使用可以是

InputSource is=new InputSource(new InputStreamReader(inputStream,”gb2312″));   
有關InputSource的細節,我們遵循如果有字元流可用,則解析器將直接讀取該流,而忽略該流中找到的任何文本編碼聲明。如果沒有字元流,但卻有位元組流,則解析器將使用該位元組流,從而使 用在InputSource 中指定的編碼,或者另外(如果未指定編碼)通過使用某種諸如 XML 規範 中的演算法演算法自動探測字元編碼。如果既沒有字元流,又沒有位元組流可用,則解析器將嘗試開啟到由系統標識符標識的資源的 URI 串連 。

  Activity, 定位, GPS, SDK, ADT
本主題由 76135 於 2011-9-18 17:36:48 審核通過

 

出處:http://www.eoeandroid.com/thread-64254-1-1.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.