所有由Google编写的文档都基于Eclipse。我们使用IntelliJ IDEA。
我知道以下几件事情:
- 我知道如何在IntelliJ中导入模块、库、添加依赖等。 - 我也知道根据Google的入门指南,你必须将google-play-services-lib作为“项目”(通过将现有代码导入工作区)添加到(Eclipse)中,在IntelliJ中可以通过从现有代码添加新模块来完成。这是相同的过程,只是名称不同。 - 我也理解Eclipse中Order and Export选项卡的作用(IntelliJ也有类似功能)。
我已经完成的工作:
- 出于安全考虑,我将Android SDK中的google-play-services_lib文件夹复制到了我的项目根目录。所以,我在同一层级下有/myprj和/google-play-services_lib(我还有/facebooksdk和/actionbarsherlock在同一层级下),然后进行了“导入模块”(从现有源)的操作。然后点击下一步,下一步,下一步……(它起作用了,被识别了)。
项目结构看起来像这样(名称故意模糊):
- 这正确地添加了一个模块(如上面的截图所示)。现在我需要添加依赖项,以便我的主项目知道这个模块。我进入我的模块列表,选择我的主模块,然后选择依赖项选项卡。我可以看到几个库(Joda time、android-query、gson等),以及两个模块:FacebookSDK和actionbarsherlock。到目前为止一切正常。这时事情就变得奇怪了。
我尝试添加的依赖项.
注意:在大多数情况下,我尝试勾选和取消导出复选框,并同时尝试将其添加到sherlockbar模块中进行测试。我知道这些是很多组合,但没办法。
1)添加一个JAR或目录(知道这是错误的,我还是试了试),并指向Google Play Module / libs中的.jar文件,名为:google-play-services.jar。
2)添加一个库(然后将其添加到项目中)。
3) 添加模块依赖项,(同时选择我的主要项目)。 这将显示一个弹出窗口,如下图所示:
问题
虽然我可以引用PlusClient并且我的导入是正确的,但是当我尝试在我的布局XML中添加一个SignInButton时,我会收到一个错误。
没有必要贴上整个XML布局,因为它没有任何奇怪的地方,只是一个RelativeLayout和一些textviews。我像这样添加了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
以下是引起我注意的代码行:
Caused by: 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处理资源的方式有关,因此它可能找不到按钮的资源。 有人成功地使用过:Intellij Idea(12+)与ActionbarSherlock和Google+图书馆吗? 如果有,怎么做? :)