2013-08-21 23 views
4

我正在使用Google和Proguard的應用內結算服務。我使用的Proguard的配置文件是一個在.../SDK /工具/ proguard的/ proguard的-android.txtAndroid應用內結算和Proguard(未知來源)

由於谷歌在這裏說:http://developer.android.com/google/play/billing/billing_best_practices.html我添加了下面一行在配置文件中:

-keep class com.android.vending.billing.** 

我使用IAB的更新文件從谷歌還有:https://code.google.com/p/marketbilling/source/detail?r=7ec85a9b619fc5f85023bc8125e7e6b1ab4dd69f

的問題是,有時,用戶使用此堆棧跟蹤報告隨機崩潰:

E/AndroidRuntime: FATAL EXCEPTION: Thread-455 
java.lang.NullPointerException 
    at com.xx.xxxx.util.IabHelper.startSetup(Unknown Source) 
    at com.xx.xxxx.util.IabHelper$2.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:856) 

它也發生在我的設備(只是打開應用程序),但只發生在我今天一次。

而且我不確定它是否是Google文件(IAB)的問題或Proguard配置文件中缺少某些內容。

回答

4

添加以下字符串

-keep class com.android.vending.billing.** 

到ProGuard的配置告訴他不要混淆這個包。

異常來自com.xx.xxxx.util.IabHelper,所以你可以嘗試添加像

-keep class com.xx.xxxx.util.IabHelper.** 

什麼能讓你的包,因爲它是不ProGuard的。

+0

我明白了......但是,那麼安全性不會更糟?雖然,IABHelper由Google提供,所以可能不需要對其進行破壞。我想我會嘗試它,但我無法調試它。 –

2

您的proguard配置是正確的。我甚至允許在我的應用程序中混淆生成的com.android.vending.billing.IInAppBillingService,一切正常。

關於IabHelper類。我不會建議「按原樣」使用它。首先,它被證明是越野車。其次,即使在被混淆時,它也可能被自動工具破解。我建議根據IabHelper編寫自己的班級,併爲其編寫junit測試。這也是我爲我的項目所做的。

+0

我讀到了這個,我想我會實現我自己的IabHelper。順便問一下,你知道互聯網總是需要嗎?我的意思是,當用戶購買物品時,是否需要檢查通過互聯網連接到Google的購物?因爲,將此購買價值保存在偏好設置或數據庫中似乎並不安全...... –

+0

這是值得遷移到應用內結算V3。所有購買都由Goole Play客戶端爲您安全緩存。您可以每次請求購買並獲得即時響應。沒有必要再在本地存儲購買。互聯網連接不是必需的。只有當用戶自己執行購買時才需要。 –

2

這條線IabHelpers startSetup()

mContext.getPackageManager() 
       .queryIntentServices(serviceIntent, 0); 

可以辦理入住手續時,如果該列表是空的,你得到空指針有時返回null,所以。

我只是修改它在做任何事之前檢查null;

List<ResolveInfo> queryIntentServices = mContext.getPackageManager() 
      .queryIntentServices(serviceIntent, 0); 
    if (queryIntentServices != null && !queryIntentServices.isEmpty()) { 
     // service available to handle that Intent 
     mContext.bindService(serviceIntent, mServiceConn, 
       Context.BIND_AUTO_CREATE); 
    }else ... 
0

只是添加到您的ProGuard配置文件保存的行號,那麼你不會得到未知來源:

-keepattributes簽名,的SourceFile,LineNumberTable

0

這爲我工作

-keep class com.android.vending.** { *; }