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.**