我想将Google Play Services库导入(并使用)到一个现有的Android项目中,但我正在纠结于一个依赖问题。
google编写的所有文档都基于Eclipse。我们使用智能思想。
我知道的事情:
我做过的事:
项目结构看起来是这样的(名称有意模糊):
注意:在大多数情况下,我尝试勾选和取消勾选导出复选框,同时尝试将其添加到sherlockbar模块中,只是为了测试。我知道这是很多组合,但哦,好吧。
1)添加一个Jar或目录(知道这是错误的,我尝试了),并指向google play模块/库中的.Jar,名为:google-play-services.Jar。
2)添加库(然后将其添加到项目中)
3)添加模块依赖项,(同时选择了我的主项目)。这将显示一个弹出窗口,如下所示:
即使我可以引用一个PlusClient并获得正确的导入,当我试图在布局xml中添加一个SignInButton时,也会出现错误。
粘贴整个XML布局没有任何意义,因为它没有任何奇怪的东西,它只是一个包含几个TextViews的RelativeLayout。我这样添加了G+按钮:
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/logo_login"
android:layout_marginBottom="30dip" />
就像谷歌说的。
第一个可能出问题的迹象是IntelliJ警告您该元素“在这里无效”,但我认为这是视觉设计器的一个限制,而不是一个真正的问题。
然而,当我运行该项目时,我得到了这样的结果:
07-30 17:50:44.854: ERROR/ActivityThread(22324): Failed to inflate
android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.gms.common.SignInButton
at android.view.LayoutInflater.createView(LayoutInflater.java:606)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:134)
at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262)
at com.myapp.ui.activities.LoginSignupActivity.onCreate(LoginSignupActivity.java:64)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
at android.app.ActivityThread.access$600(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4575)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:586)
... 24 more
Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$drawable
at com.google.android.gms.internal.aa.b(Unknown Source)
at com.google.android.gms.internal.aa.a(Unknown Source)
at com.google.android.gms.common.SignInButton.c(Unknown Source)
at com.google.android.gms.common.SignInButton.d(Unknown Source)
at com.google.android.gms.common.SignInButton.setStyle(Unknown Source)
at com.google.android.gms.common.SignInButton.<init>(Unknown Source)
at com.google.android.gms.common.SignInButton.<init>(Unknown Source)
... 27 more
下面这句话引起了我的注意:
原因:java.lang.noClassDefounderRror:com.google.android.gms.r$drawable
07-30 17:50:44.870: ERROR/AndroidRuntime(22324): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.ui.activities.LoginSignupActivity}: android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.gms.common.SignInButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2079)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
at android.app.ActivityThread.access$600(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4575)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.gms.common.SignInButton
at android.view.LayoutInflater.createView(LayoutInflater.java:606)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:134)
at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262)
at com.myapp.ui.activities.LoginSignupActivity.onCreate(LoginSignupActivity.java:64)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:586)
... 24 more
Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$drawable
at com.google.android.gms.internal.aa.b(Unknown Source)
at com.google.android.gms.internal.aa.a(Unknown Source)
at com.google.android.gms.common.SignInButton.c(Unknown Source)
at com.google.android.gms.common.SignInButton.d(Unknown Source)
at com.google.android.gms.common.SignInButton.setStyle(Unknown Source)
at com.google.android.gms.common.SignInButton.<init>(Unknown Source)
at com.google.android.gms.common.SignInButton.<init>(Unknown Source)
... 27 more
如果我从布局中移除代码,它就能工作。
我的想法是,这与Android处理R(esources)的方式有关,因此它可能没有为按钮找到资源。
有没有人能用:Intellij Idea(12+)和ActionbarSherlock和Google+库?
如果是,怎么做?:)
出于历史原因,我将重现我的所作所为,取自这里。非常感谢找到它的@hesam。我会投票结束整个问题。
注意:快捷方式适用于OS X和Intellij 12和13。
确保您有最新的SDK/ADT工具和播放服务。它们时不时地改变,并且通常不向后兼容。
更新我不得不再做一次,所以这是我所做的润色版本。
你需要有一个副本(而不是直接从SDK文件夹中使用),因为如果谷歌更新了它,当你更新SDK时东西就会坏掉,保留一个副本更安全(尽管更繁琐,因为当新版本出来时你必须手动更新)。我发现与其对神秘的编译错误感到惊讶,不如决定何时更新。
记住这一点,在项目的同时复制库。您的文件夹结构应该如下所示:
/Something/YourMainModule/
/something/any_other_module/
/something/modules.xml
/something/readme.md(如果使用github):)
图书馆位于
“Android-SDK”/extras/google/google_play_services/libproject/google-play-services_lib
ANDROID-SDK是在下载SDK时存储SDK的任何地方。谷歌时不时会改变这一点,所以只要找到它,它就会在那里。
复制整个文件夹,使您的项目现在如下所示:
/Something/YourMainModule/
/something/google-play-services_lib/
<--这是新的
/something/modules.xml
/something/readme.md
1)从项目面板(1)中选择项目/主模块,然后点击以打开项目结构窗口或只执行“文件”->“项目结构”。
2)从左面板中选择Modules,然后点击+按钮(或n),然后选择“Import module”并导航到您刚刚复制到项目的module文件夹旁边的google-play-services_lib
(/something/
)。
向导会问一系列问题,点击next,默认值没问题,但是读一下正在发生的事情,理解正在发生的事情,这是Java、Android和IntelliJ中的一个核心概念。如果你不知道每一个对话都在说什么(或者为什么有些对话是空的),就进行实验。
完成后,google play项目将与您的项目一起添加到模块中。
不要关上这个窗口(如果关上了,也不要再打开它)。
3)仍然在模块中,选择您的项目/模块,然后从右面板中选择“Dependencies”(这是一个选项卡),最后点击底部的+按钮(或者n,如果您的焦点在这个选项卡中,它会起作用),然后从弹出窗口中选择“3 Module Dependencies...”,并选择“Google-play-services_lib”,这是您在上一步中添加的。它应该在那里。如果不在,则说明您没有在第2步中添加该模块。
4)最后,再次单击+按钮(或n),但这次选择“1 JAR或目录...”,导航到上述路径的“/libs”文件夹,选择“google-play-services.jar”。
5)单击〖确定〗按钮,关闭项目结构窗口。
如果您这样做了,那么您的主模块应该有一个如下所示的依赖项:
还要确保在Project Structure窗口的FACETS选项卡中,Google Play Services选中了“Library Module”。它是一个库模块。
注意:确保您没有将“Google-play-services_lib”项目作为库添加到“Libraries”中(模块下的左侧面板)。如果你有,你可以去“图书馆,简单地删除它。谷歌播放库不应该出现在图书馆。
信用:此文本来自此StackOverflow答案
在遵循官方教程后尝试使用Google Play Services V2库时,我会遇到以下异常。 我哪里出错了?
我有一个完全在Android Studio中开发的Android项目(目前版本4.2,gradle版本1.9-全部)。我想添加Google Play服务的功能。 项目无法解析,并且当我手动输入导入时(如下所示),我会得到。 知道要让解析需要做什么吗? 从Google Play Services设置来看,我只需要将依赖项添加到我的文件(并将项目文件与gradle重新同步)中,就可以使SDK对我的项目
在阅读本文之前,请注意: 我已经做了我的研究,并阅读了其他问题,如下面的谷歌播放服务资源没有找到。检查您的项目配置,以确保包含了资源, null 我正在尝试使用谷歌的GCM服务 所以.有人吗?
问题内容: 我正在使用最新版本的Eclipse,ADT和最新的Android SDK。例如,如果我尝试在简单的HelloWorld Android项目Google Play功能中使用某些功能, 该应用程序崩溃 我真的不明白为什么它不起作用。我已经通过File> Import> [从lib源复制]添加了。我尝试使用Android 5.1.1和GoogleAPI。我将google-play-servi
当将我的项目升级到最新版本的Google Play Services(v4.0,2013年万圣节发布)时,你现在应该在文件。 不幸的是,当我尝试这样做时,我会出现以下编译错误: 然后我可以导航到并查看该符号的原始整数: 然后将其插入我的: 这样做非常好,然后我就可以编译并运行项目和应用程序了。但这肯定是一个不受欢迎的解决方案,存在明显的可升级性问题。 有什么想法吗?