1

我正在嘗試閱讀我的GCS存儲桶,但看到一個有趣的行爲。當通過Android Studio運行我的應用(作爲調試版本)時,我可以下載對象。當我創建一個簽名的APK(或作爲發佈版本運行)時,我不再能夠下載對象並收到404錯誤。Android GoogleCredential調試與發佈

這是我的授權方法:

GoogleCredential googleCredential = null; 
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
HttpTransport httpTransport = AndroidHttp.newCompatibleTransport(); 

/** Authorizes the installed application to access user's protected data. */ 
public GoogleCredential authorize() throws Exception { 
    String p12Password = "****"; 
    String keyAlias = "****"; 
    KeyStore keystore = KeyStore.getInstance("PKCS12"); 
    keystore.load(getResources().openRawResource(R.raw.gcskeystore), p12Password.toCharArray()); 

    PrivateKey privateKey = (PrivateKey)keystore.getKey(keyAlias, p12Password.toCharArray()); 

    Set<String> scopes = new HashSet<String>(); 
    scopes.add(StorageScopes.DEVSTORAGE_READ_WRITE); 

    String emailAddress = "********@developer.gserviceaccount.com"; 

    GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(emailAddress) 
      .setServiceAccountPrivateKey(privateKey) 
      .setServiceAccountScopes(scopes) 
      .build(); 

    return credential; 
} 

打印出我的憑證,它運行的時候是這樣的:

[email protected]ed8060 

,這時候我收到一個錯誤:

[email protected] 

由於創建簽名版本時出現問題,因此我認爲我的proguard規則正在跳閘東西了,但我唯一添加的是:

-dontwarn sun.misc.* 

希望有人看到過這種類型的行爲!任何幫助將不勝感激!!

Jenny

回答

3

我能解決我的問題。我更深入地研究了proguard規則。使此更新解決我的問題:

# Needed to keep generic types and @Key annotations accessed via reflection 

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault 

-keepclassmembers class * { 
    @com.google.api.client.util.Key <fields>; 
} 

# Needed by Guava 
# See https://groups.google.com/forum/#!topic/guava-discuss/YCZzeCiIVoI 

-dontwarn sun.misc.Unsafe 
-dontwarn com.google.common.collect.MinMaxPriorityQueue 

# Needed by google-http-client-android when linking against an older platform version 

-dontwarn com.google.api.client.extensions.android.** 

# Needed by google-api-client-android when linking against an older platform version 

-dontwarn com.google.api.client.googleapis.extensions.android.**