当前位置: 首页 > 知识库问答 >
问题:

将google-play-services库导入Intellij IDEA 12(和13)

秦联
2023-03-14

我想将Google Play Services库导入(并使用)到一个现有的Android项目中,但我正在纠结于一个依赖问题。

google编写的所有文档都基于Eclipse。我们使用智能思想。

我知道的事情:

    null

我做过的事:

  • 为了安全起见,我将google-play-services_lib文件夹从Android SDK复制到了我的项目根目录。所以我有/myprj和/google-play-services_lib处于同一级别(我也有/facebooksdk和/actionbarsherlock处于同一级别),并继续“导入模块”(从现有源)。然后单击next next next…(它起作用了,它被识别了)。

项目结构看起来是这样的(名称有意模糊):

    null

注意:在大多数情况下,我尝试勾选和取消勾选导出复选框,同时尝试将其添加到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+库?

如果是,怎么做?:)

共有1个答案

束俊英
2023-03-14

出于历史原因,我将重现我的所作所为,取自这里。非常感谢找到它的@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年万圣节发布)时,你现在应该在文件。 不幸的是,当我尝试这样做时,我会出现以下编译错误: 然后我可以导航到并查看该符号的原始整数: 然后将其插入我的: 这样做非常好,然后我就可以编译并运行项目和应用程序了。但这肯定是一个不受欢迎的解决方案,存在明显的可升级性问题。 有什么想法吗?