gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:08:14 27 4
gpt4 key购买 nike

我想将 Google Play Services 库导入(并使用)到现有的 Android 项目中,但我正在努力解决必须是依赖问题的问题。

google 编写的所有文档均基于 Eclipse。我们使用 IntelliJ IDEA。

我知道的事情:

  • 我知道如何在 IntelliJ 中导入模块、库、添加依赖项等。
  • 我也知道根据the getting started guide at Google ,您必须将 google-play-services-lib 作为 添加到 (Eclipse) 中项目 (通过将现有代码导入工作区),并且您可以通过从现有代码添加新模块在 IntelliJ 中执行此操作。程序相同,名称不同。
  • 我也了解 Eclipse 中的 Order 和 Export 选项卡的作用(IntelliJ 也这样做)。

  • 我做过的事情:
  • 我复制了(为了安全起见)谷歌播放服务库文件夹从 Android SDK 到我的项目根目录。所以我有/myprj 和/google-play-services_lib 在同一级别(我也有/facebooksdk 和/actionbarsherlock 在同一级别)并继续“导入模块”(来自现有来源)。然后点击next next next…(它起作用了,它被识别了)。

  • 项目结构如下所示(故意模糊名称):

    Project Structure
  • 这正确地添加了一个模块(如您在上面的屏幕截图中所见)。现在我需要添加 依赖 所以我的主要项目知道这一点。我转到我的模块并在列表中选择我的主模块,然后选择依赖项选项卡。我可以看到一些库(Joda time、android-query、gson 等)和两个模块: FacebookSDK actionbarsherlock .到目前为止,一切都很好。这就是事情变得奇怪的时候。

  • 我尝试添加的依赖项 .

    注意 :在大多数情况下,我尝试检查和取消选中导出复选框,并尝试同时将其添加到 sherlockbar 模块中,仅用于测试。我知道这些是很多组合,但是哦,好吧。

    1)添加一个Jar或目录(知道这是错误的,我试过了)。并指向 google play 模块/libs 中的 .jar,命名为:google-play-services.jar。

    2) 添加 图书馆 (然后将其添加到项目中)

    3) 添加 模块依赖 , (同时选择了我的主要项目)。这会显示一个像这样的弹出窗口:

    add dependency

    问题

    即使我可以引用 PlusClient当我尝试添加 SignInButton 时,我得到了正确的导入在我的布局 xml 中,出现错误。

    粘贴整个 XML 布局是没有意义的,因为它没有任何奇怪的东西,它只是一个带有一些 textview 的 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.NoClassDefFoundError: com.google.android.gms.R$drawable

    下面的下一个异常(exception)是:
    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+) with ActionbarSherlock 和 Google+ Library?

    如果是这样,怎么做? :)

    最佳答案

    由于历史原因,我将重现我所做的,取自 here .非常感谢 @Hesam谁找到的。我将投票结束整个问题。

    注意:快捷方式适用于 OS X 和 Intellij 12 和 13。

    确保您拥有最新的 SDK/ADT 工具和播放服务。它们时不时地变化,并且通常不向后兼容。

    更新 我不得不再次这样做,所以这是我所做的完善版本。

    你需要有一个副本(而不是直接从 SDK 文件夹中使用它),因为如果 Google 更新它,当你更新你的 SDK 时事情会中断,保留一个副本会更安全(尽管更乏味,因为你会有新版本出来时手动更新)。我发现最好决定何时更新,而不是对神秘的编译错误感到惊讶。

    考虑到这一点,将库与您的项目一起复制。您应该有一个如下所示的文件夹结构:
    /something/yourmainmodule//something/any_other_module//something/modules.xml/something/README.md (if you use github) :)
    图书馆位于
    "ANDROID-SDK"/extras/google/google_play_services/libproject/google-play-services_lib
    ANDROID-SDK 是您下载 SDK 时存储它的位置。谷歌时不时地改变它,所以只要找到它,它就会在那里。

    复制整个文件夹,使您的项目现在看起来像这样:
    /something/yourmainmodule//something/any_other_module//something/google-play-services_lib/ <-- 这是新的
    /something/modules.xml/something/README.md
    好的,现在让我们以正确的方式将其导入 IntelliJ-IDEA:

    1) 选择您的项目/主模块从项目面板 (⌘ 1) 并点击 ⌘ ↓ 以打开项目结构窗口或只执行文件 -> 项目结构。

    2) 选择模块 从左侧面板,然后点击 + 按钮(或 ⌘ N)然后选择“导入模块”并导航到 google-play-services_lib你刚刚复制的在您项目的模块文件夹旁边 . (/something/)。

    向导会问一系列问题,直接点击next,默认就可以了,但是看看怎么回事,明白怎么回事,这是Java、Android和Intellij中的一个核心概念。如果您不知道每个对话框在说什么(或者为什么有些可能是空的),请尝试一下。

    完成后,google play 项目将与您的项目一起添加到模块中。

    不要关闭此窗口(如果您关闭了,也不要再次打开它)。

    3) 仍然在模块中,选择您的项目/模块 ,然后从右侧面板(它是一个选项卡)中选择“依赖项”,最后单击 + 底部的按钮(或 ⌘ N 如果您在此选项卡中有焦点,它将起作用),然后从弹出窗口中选择“3 Module dependencies...”并选择您在前面添加的“google-play-services_lib”步。它应该在那里。如果不是,则您没有在步骤 2 中添加模块。

    4) 最后,再次点击+按钮 (或⌘ N)但这次选择“1 jars or directory...”,导航到上述路径的“/libs”文件夹并选择“google-play-services.jar”。

    5) 单击确定并关闭项目结构窗口。

    如果你这样做了,你的主模块应该有一个如下所示的依赖项:

    Dependencies

    还要确保在项目结构窗口中,方面 选项卡,Google Play 服务已选中“库模块”。它是一个库模块。

    备注 :确保您没有在“库”中添加“google-play-services_lib”项目作为库(模块下的左侧面板)。如果有,您可以转到“ 并简单地删除它。 Google Play 库不应出现在库中

    信用 : 本文来自this StackOverflow answer

    关于android - 将 google-play-services 库导入 Intellij IDEA 12(和 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17960315/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com