我们或许天真地决定,我们应该将我们的许多库从两年前的1.12.0-betas更新到漂亮的新版本1.20.0。例如:我们将google-http-client-1.12.0-beta.jar更新为google-http-client-android-1.20.0.jar。
执行此代码时:
List<String> scopes = Lists.newArrayList(SendToGoogleUtils.FUSION_TABLES_SCOPE);
GoogleAccountCredential credential = SendToGoogleUtils.getGoogleAccountCredential(
context, account.name, scopes );
if (credential == null) {
return false;
}
Fusiontables fusiontables = new Fusiontables.Builder(
AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build();
我们收到了这个惊人的错误报告:
FATAL EXCEPTION Caused by: java.lang.NoSuchMethodError: No direct method <init>(Lcom/google/api/client/http/HttpTransport;Lcom/google/api/client/http/HttpRequestInitializer;Ljava/lang/String;Ljava/lang/String;Lcom/google/api/client/json/JsonObjectParser;Lcom/google/api/client/googleapis/services/GoogleClientRequestInitializer;Ljava/lang/String;Z)V in class Lcom/google/api/client/googleapis/services/json/AbstractGoogleJsonClient; or its super classes (declaration of 'com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient' appears in /data/app/dkr.ajijic.apps.tm-1/base.apk)
有人知道怎么解读吗?我们当然不会!
答案 0 :(得分:4)
这只是意味着具有特定参数列表的AbstractGoogleJsonClient的构造函数不可用。
检查super()
对AbstractGoogleJsonClient
子类的调用,并确保无需更新参数列表以匹配更新的库。
如果您的源代码中没有,那么Google API客户端库可能存在库版本依赖性问题。
答案 1 :(得分:0)
发生此问题是因为通过Proguard应用了Proguard,此类名称和方法名称发生了更改,从而导致了NoSuchMethod异常的发生。
要解决此错误,请在您的Proguard规则中添加以下行。
-保留com.google类。** {*; }
希望这可以解决您的问题。
答案 2 :(得分:0)
当源代码目标版本高于设备上使用的操作系统版本时,在 Android 上有此问题。
因此可以访问与操作系统捆绑在一起的库中不存在的方法,因此 NoSuchMethodError
。