2013-01-06 23 views
6

隨着Android應用商店提供特定於市場的API,我如何構建一個有條件地使用特定於供應商的庫的Android應用?例如,亞馬遜提供了自己的應用程序內購買和「GameCircle」API。 Google擁有自己的許可API,現在Ouya將擁有自己的IAP和硬件控制器API。如何有條件地使用針對Android應用程序的特定於供應商的API?

隨着這些特定於供應商的SDK的激增,要維護幾個獨立的Android遊戲構建變得越來越困難。我想知道如何構建我的項目,以便我的代碼可以在運行時檢查各種API並在可用時使用它們。像

if (amazon api is available) 
    // Do some amazon-specific stuff 

在建設時我會鏈接所有庫,然後上傳相同的通用應用程序到每個商店。

+1

你的答案可能會因圖書館而異,而且很少有人能熟練掌握所有這些方面。 ,或者更好的解釋你如何使用它們(例如'?)。 – CommonsWare

+0

你可以爲每個API使用一個'public static final boolean'變量,然後在引用它時檢查它的值。我認爲這就是你會找到的最好的萬能解決方案;正如CommonsWare所說的,其他解決方案將是特定於API的 – Eric

+0

至少對於Amazon Payments API來說,如果它無法連接,我知道它進入沙盒模式。 –

回答

5

我目前使用這個。

private boolean isAmazonInstall() 
{ 
    PackageManager pm = getPackageManager(); 
    String installationSource = pm.getInstallerPackageName(getPackageName()); 
    if (installationSource != null && installationSource.startsWith("com.amazon")) 
    { 
        return true; 
    } 
      return false; 
} 

據稱,一個Amazon安裝,getInstallerPackageName的返回值是 「com.amazon.venezia」。對於從Google Play安裝的應用程序,結果是「com.android.vending」(雖然它曾經是「com.google.android.feedback」。手動APK安裝返回null。

我還沒有能夠找到官方確認這種方法是有效的,但我一直沒有找到更好的方法

+0

說實話,這似乎是一個粗略的方法,但是如果沒有「更好的方法」,它會把事做好。謝謝 – James

+0

完全同意。這有點粗略。 –

+0

酷,這將如何爲黑莓世界工作? – CQM

相關問題