Я хотел бы импортировать (и использовать) библиотеку Служб Google Play в существующий проект Android, но я борюсь с тем, что должно быть проблемой зависимости.
Вся документация, написанная google, основана на Eclipse. Мы используем IntelliJ IDEA.
Вещи, которые я знаю:
- Я знаю, как импортировать модули, библиотеки, добавлять зависимости и т.д. в IntelliJ.
- Я также знаю, что согласно руководству по началу работы в Google, вы должны добавить google-play-services-lib в (Eclipse ) как проект (путем импорта существующего кода в рабочую область), и что вы можете сделать это в IntelliJ, добавив новый модуль из существующего кода. Это та же процедура, другое имя.
- Я также понимаю, что вкладка "Заказ и экспорт" выполняется в Eclipse (IntelliJ делает это тоже).
Что я сделал:
- Я скопировал (для безопасности) папку google-play-services_lib из Android SDK в свой корень проекта. Таким образом, у меня есть /myprj и/google-play-services_lib на одном уровне (у меня также есть /facebooksdk и/actionbarsherlock на том же уровне) и перешел к "Import Module" (из существующего источника). Затем щелкнул следующий следующий следующий... (он работал, он был распознан).
Структура проекта выглядит так (название намеренно размыто):
- Это правильно добавило модуль (как вы можете видеть на скриншоте выше). Теперь мне нужно добавить зависимость, поэтому мой главный проект знает об этом. Я перехожу к своим модулям и списку, выбираю вкладку "Мой основной модуль" и "Зависимости". Я вижу несколько библиотек (время Joda, андроид-запрос, gson и т.д.) И два модуля: FacebookSDK и actionbarsherlock. Все идет нормально. И это когда вещи становятся странными.
Зависимости, которые я пытался добавить.
ПРИМЕЧАНИЕ. В большинстве случаев я попытался проверить и снять флажок экспорта, а также попытался добавить это в модуль sherlockbar одновременно, только для тестирования. Я знаю, что это много комбинаций, но хорошо.
1) Добавьте Jar или каталог (зная, что это было неправильно, я попытался). и указал на .jar, который находится в модуле/библиотеках google, названном: google-play-services.jar.
2) Добавьте Библиотека (а затем добавьте ее в проект (ы))
3) Добавьте Зависимость модуля, (при выборе моего основного проекта). Появится всплывающее окно:
ПРОБЛЕМА
Даже я могу ссылаться на PlusClient, и я получаю правильный импорт, когда я пытаюсь добавить SignInButton в моем макете xml, я получаю сообщение об ошибке.
Нет смысла вставлять весь 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?
Если да, то как?:)