Класс не найден в aar

Я получаю исключение класса в моей библиотеке Android (aar), когда вызывается GoogleApiAvailability.

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.GoogleApiAvailability" on path: DexPathList[[zip file "/data/app/com.myunityplugin.PushNotifications-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myunityplugin.PushNotifications-1/lib/arm, /vendor/lib, /system/lib]] 

Ошибка очевидна, но я не уверен, что я делаю неправильно. Я довольно новичок в градиенте и AndroidStudio.

У меня есть следующие под зависимостями внутри моего gradle.build:

  compile 'com.google.android.gms:play-services:8.4.0' compile 'com.google.android.gms:play-services-gcm:8.4.0' 

Я думаю, проблема в том, что библиотека игровых сервисов должна быть включена в aar, а компиляция этого не делает. Я пробовал использовать «runtime», но я получаю «runle dsl runl не найден».

Вопросов:

  1. Является ли это проблемой, когда мне нужно включить библиотеку игровых сервисов в моем ааре и как это сделать? (Если нет, то как мне решить эту проблему)
  2. Нужно ли мне указывать игровые сервисы или достаточно ли игровых сервисов-gcm?

Информация об ошибке / настройка

Линия, вызывающая ошибку

 GoogleApiAvailability ServiceAvailability = GoogleApiAvailability.getInstance(); 

Исключение:

 05-23 05:38:48.221 28055-28055/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myunityplugin.PushNotifications, PID: 28055 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/GoogleApiAvailability; at com.myplugin.unitynotification.GCM.GCM.checkPlayServices(GCM.java:33) at com.myplugin.unitynotification.GCM.MainActivity.onCreate(MainActivity.java:80) at android.app.Activity.performCreate(Activity.java:6550) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3108) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3263) at android.app.ActivityThread.access$1000(ActivityThread.java:197) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1687) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6897) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.GoogleApiAvailability" on path: DexPathList[[zip file "/data/app/com.myunityplugin.PushNotifications-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myunityplugin.PushNotifications-1/lib/arm, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at com.myplugin.unitynotification.GCM.GCM.checkPlayServices(GCM.java:33) at com.myplugin.unitynotification.GCM.MainActivity.onCreate(MainActivity.java:80) at android.app.Activity.performCreate(Activity.java:6550) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3108) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3263) at android.app.ActivityThread.access$1000(ActivityThread.java:197) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1687) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6897) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.common.GoogleApiAvailability at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 16 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Уровень приложения build.gradle

 apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.google.android.gms:play-services:8.4.0' compile 'com.google.android.gms:play-services-gcm:8.4.0' provided files('lib-not-include/classes.jar') } 

Уровень проекта gradle.build

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

Файл aar не содержит вложенных (или транзитивных ) зависимостей и не имеет файла pom, который описывает зависимости, используемые библиотекой.

Это означает, что если вы импортируете файл flatDir с использованием flatDir вам необходимо указать зависимости в вашем проекте.

Вы должны использовать репозиторий maven (вам нужно публиковать библиотеку в частном или публичном репозитории maven), у вас не будет такой же проблемы.
В этом случае gradle загружает зависимости, используя файл pom, который будет содержать список зависимостей.