使用 proguard files().list() 缩小我的发布 apk 后,不会返回任何文件(在调试模式下会返回文件)。我使用快速入门示例进行登录。没有错误消息。看来登录成功了。
这是我的 proguard.cfg:
-optimizationpasses 1
#-dontoptimize
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!class/unboxing/enum
-dontwarn android.support.v4.**
-dontwarn com.google.**
#-keep public class com.google.**
#-keep public class android.**
#-keep class com.google.android.gms.** { *; }
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
#-keep public class * extends android.app.Activity
#-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
#-keep public class pub.devrel.easypermissions.**
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
这是检索文件的代码:
private List<String> getDataFromApi() throws Exception {
// Get a list of up to 10 files.
lib.setgstatus("getDataFromApi Start");
List<String> fileInfo = new ArrayList<String>();
FileList result = mService.files().list()
.setPageSize(10)
.setFields("nextPageToken, files(id, name)")
.execute();
lib.setgstatus(result.toString());
List<File> files = result.getFiles();
if (files != null) {
lib.setgstatus("getDataFromApi files.size:" + files.size());
for (File file : files) {
fileInfo.add(String.format("%s (%s)\n",
file.getName(), file.getId()));
}
}
else
{
lib.setgstatus("getDataFromApi files is null");
}
lib.setgstatus("getDataFromApi Finish");
return fileInfo;
}
result.toString() 返回有效的 JSON 结果,但 files 为空。
这是我的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
defaultConfig {
applicationId "org.de.jmg.jmgphotouploader"
minSdkVersion 11
targetSdkVersion 24
}
signingConfigs {
release {
keyAlias 'jmgphotouploader'
keyPassword '****'
storeFile file('/pub/keystore')
storePassword '****'
}
debug {
keyAlias 'jmgphotouploader'
keyPassword '****'
storeFile file('/pub/keystore')
storePassword '****'
}
}
buildTypes {
debug {
debuggable true
minifyEnabled false
//shrinkResources true
//proguardFile 'proguard.cfg'
}
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFile 'proguard.cfg'
//proguardFile getDefaultProguardFile('proguard-android.txt')
//proguardFiles getDefaultProguardFile('proguard-android.txt') ,'proguard.cfg'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile project(':src')
compile project(':utilities')
compile 'com.google.android.gms:play-services-auth:9.6.1'
compile 'pub.devrel:easypermissions:0.1.5'
compile('com.google.api-client:google-api-client-android:1.22.0') {
exclude group: 'org.apache.httpcomponents'
}
compile('com.google.apis:google-api-services-drive:v3-rev47-1.22.0') {
exclude group: 'org.apache.httpcomponents'
}
}
仅添加
-keep class * extends com.google.api.client.json.GenericJson {
*;
}
-keep class com.google.api.services.drive.** {
*;
}
proguard.cfg 有效!
对我有用的是:
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
-keep class * extends com.google.api.client.json.GenericJson { *; }
-keep class com.google.api.services.drive.** { *; }
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
很有帮助
测试示例:https://github.com/googleworkspace/android-samples/tree/master/drive/deprecation
-keep class * extends com.google.api.client.json.GenericJson { *; }
-keep class com.google.api.services.drive.** { *; }
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
规则适用于最新的驱动器 API 取决于:
implementation("com.google.android.gms:play-services-auth:21.0.0")
implementation("com.google.http-client:google-http-client-gson:1.44.1")
implementation("com.google.api-client:google-api-client-android:2.3.0") {
exclude("org.apache.httpcomponents")
}
implementation("com.google.apis:google-api-services-drive:v3-rev20240123-2.0.0") {
exclude("org.apache.httpcomponents")
}