为了完整性
我猜你是通过Google Drive QuickStart中的代码示例进入这个异常页面的。如果是这样,你可能会发现我需要修改以下内容。
Google Play Services Lib(注意下面的评论!)
文档使用了将库添加到Android项目的旧方法。但在最新的ADT上执行时会失败。你可以编译并上传到设备/模拟器上,但在执行时会出现NoClassDefFoundError错误。
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/AccountPicker;
要解决这个问题,你应该将
google-play-services.jar
文件复制并粘贴到
libs
文件夹中。
缺少meta标签
接下来是另一个错误。我收到了一个
IllegalStateException
错误,并得到添加一个包含google-play-services版本信息的meta标签在清单中的指示。
所以,在清单的应用程序标签中添加如下内容:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
在资源文件中的一个文件(res/values/a-file-here.xml
)中添加以下内容:
<integer name="google_play_services_version">4030500</integer>
在我的情况下,这个库匹配了这个版本。如果你在这里输入错误的版本,你会得到一个错误提示,显示正确的版本。所以一定要检查输出。
权限被拒绝
最后,我在应用程序中得到了一个oauth提示,只是发现示例应用程序仍然缺少一个权限。参考错误信息:
java.io.FileNotFoundException: /storage/emulated/0/Pictures/IMG_20131211_110629.jpg: open failed: EACCES (Permission denied)
除了示例中列出的权限外:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
同时在你的清单文件中添加WRITE_EXTERNAL_STORAGE权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
更多资源
如果你遇到了一个com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
的异常,并且在根本原因中某个地方显示了Unknown
,那么你应该检查一下Google API控制台中的设置。我在包不匹配时收到了这个错误。
其他有用的链接包括OAuth2文档和google api playground。