我想将 Google Play Services 库导入(并使用)到现有的 Android 项目中,但我正在努力解决必须是依赖问题的问题。
google 编写的所有文档均基于 Eclipse。我们使用 IntelliJ IDEA。
我知道的事情:
- 我知道如何在 IntelliJ 中导入模块、库、添加依赖项等。
- 我也知道,根据Google 的入门指南,您必须将 google-play-services-lib 作为项目添加到 (Eclipse) 中(通过将现有代码导入工作区),并且您可以在 IntelliJ 中执行此操作通过从现有代码中添加新模块。程序相同,名称不同。
- 我也了解 Eclipse 中的 Order 和 Export 选项卡的作用(IntelliJ 也这样做)。
我做过的事情:
- 我(为了安全起见)将google-play-services_lib文件夹从 Android SDK 复制到我的项目根目录。所以我有 /myprj 和 /google-play-services_lib 在同一级别(我也有 /facebooksdk 和 /actionbarsherlock 在同一级别)并继续“导入模块”(来自现有来源)。然后点击next next next…(它起作用了,它被识别了)。
项目结构如下所示(故意模糊名称):
- 这正确地添加了一个模块(如您在上面的屏幕截图中所见)。现在我需要添加依赖项,以便我的主项目知道这一点。我转到我的模块并在列表中选择我的主模块,然后选择依赖项选项卡。我可以看到一些库(Joda time、android-query、gson 等)和两个模块:FacebookSDK和actionbarsherlock。到目前为止,一切都很好。这就是事情变得奇怪的时候。
我尝试添加的依赖项。
笔记:在大多数情况下,我尝试检查和取消选中导出复选框,并尝试同时将其添加到 sherlockbar 模块,仅用于测试。我知道这些是很多组合,但是哦,好吧。
1)添加一个Jar或目录(知道这是错误的,我试过了)。并指向 google play 模块 /libs 中的 .jar,命名为:google-play-services.jar。
2)添加一个库(然后将其添加到项目中)
3)添加模块依赖,(同时选择了我的主项目)。这会显示一个像这样的弹出窗口:
问题
即使我可以引用PlusClient并获得正确的导入,当我尝试在布局 xml 中添加SignInButton时,我也会收到错误消息。
粘贴整个 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
下面的下一个例外是:
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?
如果是这样,怎么做?:)