Android真機沒有google_add-on之後

本文能解決的問題:
1. INSTALL_FAILED_MISSING_SHARED_LIBRARY
2. 向沒有Google APIs的手機內核注入谷歌服務
3. 在真機上調試Google Maps程序

    由於有關部門與谷歌的冷戰關係,不僅導致google一系列網路服務在國內舉步維艱,甚至戕害得google的手機服務必須閹割。基於Android手機的一些列google add-on服務在國行手機上都不會出現。
    筆者在折騰Android軟件開發的時候由於用到了Google APIs Level 10裏面的com.google.android.maps.jar包,學習一個小demo,在模擬器上能夠運行,在華爲的破手機上能運行,在魅族的手機上能運行,在小米的手機上能運行,好吧,重點來了,在Google自己的Moto手機Atrix2上不能運行。

以下是在Atrix2上debug程序時Console與Logcat出錯記錄

01
02
03
04
05
06
07
08
09
10
Console錯誤信息
WARNING: Application doe not specify an API level requirement!
Device API version is 10 (Android 2.3.6)
Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY
Please check logcat output for more details
Lanch canceled!
  
Logcat錯誤信息
Tag: Package
Text: Package 我的包名 requires unavailable shared library com.google.android.maps;failing!

   
    在百度與谷歌上和膝蓋已經中過箭的前輩們惺惺相惜了一會兒才知道,Moto、三星國行基本都閹割了Google APIs,(魅族和小米卻沒有)。解決方法大致有兩個方向:
方向一從自己的軟件代碼着手,方法有兩個:[1]
    1)維護兩條代碼分支:
    一條分支是針對於內置有Google Map add-on的Android真機,另一條分支是沒有內置有Google Map add-on的Android真機。 但是這樣做會增加維護成本,而且粗心的用戶可能會在自己的機器上安裝了不匹配的分支,從而降低了軟件的友好度。
    2)仍然只保留一條代碼分支:
    國外一位大牛指出:在<uses-library>標籤中還包含了一個沒有公佈的屬性"android:required",你可以將com.google.android.maps庫的這個屬性設置爲false,即:

1
2
<!-- The "android:required" attribute was added in API level 5 (Android 2.0) -->
<uses-library android:name="com.google.android.maps" android:required="false" />

    這代表如果在目標機器上內置了Google Map add-on,則可以正常使用應用;如果目標機器沒有內置Google Map add-on,也可以成功安裝應用。但是開發人員需要在代碼中自行判斷Google Map add-on是否可用,舉例如下:

01
02
03
04
05
06
07
08
09
10
try {
    Class.forName("com.google.android.maps.MapActivity");
} catch (Exception e) {
    Toast.makeText(MainActivity.this, "Oop! google地圖不可用", Toast.LENGTH_SHORT).show();
    return;
}
  
Intent intent = new Intent();
intent.setClass(MainActivity.this, MyMapActivity.class);
startActivity(intent);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章