Mar*_*ini 37 android intellij-idea actionbarsherlock google-play-services
我想将Google Play服务库导入(并使用)到现有的Android项目中,但我正在努力解决必须存在的依赖问题.
谷歌编写的所有文档都基于Eclipse.我们使用IntelliJ IDEA.
我知道的事情:
我做过的事情:
项目结构看起来像这样(名称故意模糊):

注意:在大多数情况下,我尝试检查并取消选中导出复选框,并尝试同时将其添加到sherlockbar模块,仅用于测试.我知道这些是很多组合,但是哦.
1)添加一个Jar或目录(知道这是错的,我试过).并指向google play module/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" />
Run Code Online (Sandbox Code Playgroud)
就像谷歌说的那样.
可能出现问题的第一个迹象是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
Run Code Online (Sandbox Code Playgroud)
以下是引起我注意的一句话:
引起: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
Run Code Online (Sandbox Code Playgroud)
如果我从布局中删除代码,它可以工作.
我的想法是,这与Android处理R(资源)的方式有关,因此它可能无法找到按钮的资源.
有没有人设法使用:Intellij Idea(12+)与ActionbarSherlock和Google+图书馆?
如果是这样,怎么样?:)
Mar*_*ini 96
由于历史原因,我将重现我所做的,取自这里.非常感谢@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时存储SDK的任何位置.谷歌时不时地改变它,所以只要找到它,它就会存在.
复制整个文件夹,以便您的项目现在如下所示:
/something/yourmainmodule/
/something/any_other_module/
/something/google-play-services_lib/< - 这是新的一个
/something/modules.xml
/something/README.md
好的,现在让我们以正确的方式将它导入IntelliJ-IDEA:
1)从项目面板()中选择项目/主模块,⌘ 1然后单击⌘ ↓以打开项目结构窗口或只执行文件 - >项目结构.
2)从左侧面板中选择Modules,然后按+按钮(或⌘ N),然后选择" 导入模块 "并导航到google-play-services_lib您刚刚复制到项目模块文件夹旁边的那个.(/something/).
该向导将询问一系列问题,只需点击下一步,默认即可,但阅读正在发生的事情,了解正在发生的事情,这是Java,Android和Intellij的核心概念.如果您不知道每个对话框的内容(或为什么有些可能为空),请进行实验.
完成后,Google Play项目将与项目一起添加到模块中.
请勿关闭此窗口(如果您这样做,请再次打开).
3)仍然在模块中,选择你的项目/模块,然后从右侧面板选择" Dependencies "(它是一个标签),最后点击底部的+按钮(⌘ N如果你在此标签中有焦点,它将起作用),然后从弹出窗口选择" 3 Module dependencies ... "并选择您在上一步中添加的"google-play-services_lib".应该在那里.如果不是,则表示您未在步骤2中添加模块.
4)最后,再次单击+按钮(或⌘ N),但这次选择" 1个罐子或目录...... ",导航到上述路径的"/ libs"文件夹并选择"google-play-services.jar".
5)单击"确定"并关闭项目结构窗口.
如果你这样做,你的主模块应该有一个如下依赖:

还要确保在"项目结构"窗口的" FACETS"选项卡中,Google Play服务已选中"库模块".这是一个图书馆模块.
注意:确保您没有在"库"(模块下的左侧面板)中添加"google-play-services_lib"项目作为库.如果有,您可以访问" 图书馆并将其删除.Google Play Library不应出现在图书馆中.
信用:此文本来自此StackOverflow答案
| 归档时间: |
|
| 查看次数: |
21498 次 |
| 最近记录: |