本文主要介紹android應用程序安裝后圖標不顯示的幾個可能原因。
自己寫的程序突然安裝后圖標不見了,在應用程序安裝中能找到,但是桌面上就是沒有圖標,啟動只能從最近列表中其中。。一般這種情況只會在服務類程序和測試程序中出現,因為不需要圖標。
google無果,自己二分調試解決了,並測試了其他網友提供的其他會出錯原因,大致總結如下:
1、AndroidManifest中application元素屬性設置問題
屬性設置錯誤
<application android:icon="@drawable/icon" android:label="@string/app_name">
設置圖標為icon,而上面的icon資源文件不存在
解決方法:添加icon資源文件
2、AndroidManifest中 沒有activity設置android.intent.category.LAUNCHER category或android.intent.action.MAIN action
AndroidManifest沒有任何activity設置了
<category android:name="android.intent.category.LAUNCHER" />
和<action android:name="android.intent.action.MAIN" />
在運行時候你會發現如下提示信息,表示異步執行
[2012-03-25 ……] No Launcher activity found!
[2012-03-25 ……] The launch will only sync the application package on the device!
而程序已經安裝在列表中,但並沒有圖標而且也沒有將android.intent.action.MAIN屬性的activity執行顯示在屏幕最前端。
解決方法:在主activity中添加這兩個屬性
關於這兩個屬性的意思更多請參考:
3、main intent-filter同時配置了不同種類的action和data,配置如下:
<activity android:name=".AccountManageActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <data android:scheme="aone" android:host="AccountManageActivity" /> </intent-filter> </activity>
有網友說這種方式無法啟動,但經過自己測試能啟動只是不會顯示圖標而已
解決方法:分為兩個intent-filter,如下
<activity android:name=".AccountManageActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <data android:scheme="aone" android:host="AccountManageActivity" /> </intent-filter> </activity>
原因為intent-filter表示activity接受怎樣的intent,定義在一個intent-filter中的條件必須都滿足才能按照該intent-filter啟動,否則按照其他intent-filter啟動。而以上明顯是兩類啟動方式,所以必須分開。通過這個介紹可以知道其他的action、category、data沖突也有可能導致這個問題
我本地是最后一個原因,調試n久,因為最開始寫時沒加data,這個時候圖標已經創建,加完data之后圖標仍然在,只不過是第一個創建好的,所以一直沒發現,加了一些新功能原來的apk刪除后,突然發現沒圖標了,一直以為是新加功能造成的。。。