google api java 使用 proguard-android-optimize.txt 时客户端未传递值为 0 的参数
google api java client not passing parameter with value 0 when using proguard-android-optimize.txt
我有一个 Google API
java 客户端模型 class 作为:
public final class AccountProviders extends com.google.api.client.json.GenericJson
参数 lastSyncTime
为:
/**
* @return value or {@code null} for none
*/
public java.lang.Long getLastSyncTime() {
return lastSyncTime;
}
使用混淆器配置时:
release {
resValue "string", "app_name", "MyApp"
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
对于 0
或任何其他 long
值作为 lastSyncTime
的值,一切正常,但是如果使用以下 proguard 配置:
release {
resValue "string", "app_name", "MyApp"
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
}
API 抛出 503
,因为请求中缺少参数 lastSyncTime
,值 0
;它适用于其他 long
值。
使用优化的 proguard config
正在剥离 google API java 客户端请求的 param
;如果参数的值为 0
请提出任何补救措施。
我们发现混淆器用相同的引用替换了 new Long(0)
的所有实例。 (与 String/Int 等相同)因此在这种情况下,如果您有任何值为 0 的参数。它将转换为 new Long(0)
的相同引用。由于 com.google.api.client.util.Data.java
中 isNull
的检查导致该字段被设置为空。因此它不会在您的 API 调用中传递。
解决方案:
将以下行添加到 proguard 规则以禁用此 proguard 简化。
-optimizations !code/simplification/*
Aalap 发现,Google API 代码创建了某些类型的标记实例(例如 new Boolean(true))。您可以使用
避免破坏此类代码的优化(例如 Boolean.TRUE)
-optimizations !code/simplification/object
或者对于更本地的解决方案,只需保留此代码:
-keepclassmembers,includecode class com.google.api.client.util.Data {
void <clinit>();
}
我有一个 Google API
java 客户端模型 class 作为:
public final class AccountProviders extends com.google.api.client.json.GenericJson
参数 lastSyncTime
为:
/**
* @return value or {@code null} for none
*/
public java.lang.Long getLastSyncTime() {
return lastSyncTime;
}
使用混淆器配置时:
release {
resValue "string", "app_name", "MyApp"
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
对于 0
或任何其他 long
值作为 lastSyncTime
的值,一切正常,但是如果使用以下 proguard 配置:
release {
resValue "string", "app_name", "MyApp"
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
}
API 抛出 503
,因为请求中缺少参数 lastSyncTime
,值 0
;它适用于其他 long
值。
使用优化的 proguard config
正在剥离 google API java 客户端请求的 param
;如果参数的值为 0
请提出任何补救措施。
我们发现混淆器用相同的引用替换了 new Long(0)
的所有实例。 (与 String/Int 等相同)因此在这种情况下,如果您有任何值为 0 的参数。它将转换为 new Long(0)
的相同引用。由于 com.google.api.client.util.Data.java
中 isNull
的检查导致该字段被设置为空。因此它不会在您的 API 调用中传递。
解决方案: 将以下行添加到 proguard 规则以禁用此 proguard 简化。
-optimizations !code/simplification/*
Aalap 发现,Google API 代码创建了某些类型的标记实例(例如 new Boolean(true))。您可以使用
避免破坏此类代码的优化(例如 Boolean.TRUE)-optimizations !code/simplification/object
或者对于更本地的解决方案,只需保留此代码:
-keepclassmembers,includecode class com.google.api.client.util.Data {
void <clinit>();
}