web-dev-qa-db-ja.com

google-play-servicesライブラリをIntellijにインポートIDEA 12(および13)

Google Play Servicesライブラリを既存のAndroidプロジェクトにインポート(および使用)したいのですが、依存関係の問題に苦労しています。

Googleが作成したすべてのドキュメントはEclipseに基づいています。 IntelliJ IDEAを使用します。

私が知っていること:

  • IntelliJでモジュール、ライブラリをインポートする方法、依存関係を追加する方法などを知っています。
  • また、 Googleのスタートガイド によると、google-play-services-libをproject(既存のコードをワークスペースにインポートすることにより)、および既存のコードから新しいモジュールを追加することにより、IntelliJでこれを行うことができます。同じ手順で、名前は異なります。
  • また、Eclipseの[注文とエクスポート]タブの機能も理解しています(IntelliJも同様です)。

私がやったこと:

  • (安全のため)google-play-services_libフォルダーをAndroid SDKからプロジェクトルートにコピーしました。同じレベルに/ myprjと/ google-play-services_libがあり(同じレベルに/ facebooksdkと/ actionbarsherlockもあります)、「モジュールのインポート」(既存のソースから)に進みました。働いた、それが認識された)。

プロジェクト構造は次のようになります(名前は意図的にぼやけています):

Project Structure

  • これにより、モジュールが正しく追加されました(上のスクリーンショットをご覧ください)。ここで、dependencyを追加する必要があります。これにより、メインプロジェクトはこれを認識します。 modulesに移動し、リストでメインmoduleを選択してからdependencies タブ。いくつかのライブラリ(Joda time、Android-query、gsonなど)と2つのmodulesFacebookSDKおよびactionbarsherlock。ここまでは順調ですね。そして、これは物事が奇妙になるときです。

追加しようとした依存関係

[〜#〜] note [〜#〜]:ほとんどの場合、エクスポートチェックボックスをオンまたはオフにし、sherlockbarモジュールに追加しようとしました。同時に、テストのためだけに。私はこれらが多くの組み合わせであることを知っていますが、まあまあです。

1)Jarまたはディレクトリを追加します(これが間違っていることを知って、試しました)。 google-play-services.jarという名前のgoogle playモジュール/ libs内の.jarを指します。

2)Libraryを追加します(その後、プロジェクトに追加します)

3)Module Dependencyを追加します(メインプロジェクトを選択した状態で)。これにより、次のようなポップアップが表示されます。

add dependency

[〜#〜]問題[〜#〜]

私も PlusClient を参照でき、レイアウトXMLに SignInButton を追加しようとすると、正しいインポートを取得できますが、エラーが発生します。

XMLレイアウト全体を貼り付けても意味がありません。何も変なものはなく、いくつかのテキストビューを持つ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" />

Googleが言うように。

何かが故障している可能性がある最初の兆候は、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+)とActionbarSherlockおよびGoogle+ Libraryを使用している人はいますか?

もしそうなら、どのように? :)

37

歴史的な理由から、私は ここ から取ったものを再現します。 @ Hesa​​m に感謝します。質問全体を終了するために投票します。

:ショートカットはOS XおよびIntellij 12および13用です。

最新のSDK/ADTツールとプレイサービスがあることを確認してください。それらは時々変更され、通常、後方互換性はありません。

[〜#〜] update [〜#〜]これをもう一度しなければならなかったので、これは私がやったことの洗練されたバージョンです。

(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を保存した場所です。 Googleはこれを時々変更するので、見つけてください。

そのフォルダー全体をコピーして、プロジェクトが次のようになるようにします。

_/something/yourmainmodule/_

_/something/any_other_module/_

_/something/google-play-services_lib/_ <-このIS THE NEW ONE

_/something/modules.xml_

_/something/README.md_

それでは、IntelliJ-IDEAに正しい方法でインポートしましょう。

1)プロジェクトパネルからプロジェクト/メインモジュールを選択します(⌘ 1)とヒット ⌘ ↓ プロジェクト構造ウィンドウを開くか、単にファイル->プロジェクト構造を実行します。

2)左パネルからModulesを選択し、+ボタンを押します(または ⌘ N)次に「import module」を選択し、プロジェクトのモジュールフォルダーの隣にコピーした_google-play-services_lib_に移動します。 (_/something/_)。

ウィザードは一連の質問をします。次にヒットするだけで、デフォルトは問題ありませんが、何が起こっているかを読んで、何が起こっているのかを理解します。これはJava、AndroidおよびIntellijのコアコンセプトです。各ダイアログが何を言っているのかわからない場合(またはいくつかのダイアログが空である理由)を試してください。

完了すると、Google PlayプロジェクトがプロジェクトとともにModulesに追加されます。

このウィンドウを閉じないでください(または、再度開いた場合)。

3)modulesで、プロジェクト/モジュールを選択し、「Dependencies」を右パネルから(tab)、最後に+下部のボタン(または ⌘ N このタブにfocusがある場合は機能します)、ポップアップから「3モジュールの依存関係...」を選択します前の手順で追加した「google-play-services_lib」を選択します。そこにあるはずです。そうでない場合は、ステップ2でモジュールを追加しませんでした。

4)最後に、もう一度+ボタンをクリックします(または ⌘ N)が、今回は「1 jarまたはディレクトリ...」を選択し、上記のパスの「/ libs」フォルダに移動して「google-play-services.jar」を選択します。

5)[OK]をクリックして、プロジェクト構造ウィンドウを閉じます。

これを行った場合、メインモジュールには次のような依存関係があります。

Dependencies

また、プロジェクト構造ウィンドウの[〜#〜] facets [〜#〜]タブで、Google Play Servicesに「ライブラリモジュール「チェックしました。これはライブラリモジュールです。

:「google-play-services_lib」プロジェクトをライブラリとして「ライブラリ」(モジュールの下の左パネル)に追加していないことを確認してください。持っている場合は、「Librariesに移動して単純に削除できます。Google Playライブラリはライブラリに表示されません」

クレジット:このテキストは このStackOverflowの回答

96