Добавление библиотеки сервиса Google Play в существующий библиотечный проект

В моем приложении (основной проект) я добавляю 3 существующих проекта, помеченных как Библиотека, и для всех этих 3 проектов (библиотеки) требуется GooglePlayServiceLibrary, чтобы они могли показывать объявления AdMob и Interstitial.

Я успешно добавил эти 3 библиотечных проекта в свой основной проект, и они работают нормально без рекламы AdMob и Interstitial (без добавления GooglePlayServiceLibrary к этим 3 проектам), когда я запускаю MainActivity моих библиотечных проектов из моих основных проектов Activity. Но когда я добавляю GooglePlayServiceLibrary к этим 3 проектам и пытаюсь их запустить, я получаю ошибки.

XML код библиотечного проекта:

<com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="myadId" />

Java-код библиотечного проекта:

AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).addTestDevice("").build();
adView.loadAd(adRequest);

Файл манифеста проекта библиотеки:

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
<activity
    android:name="com.google.android.gms.ads.AdActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|smallestScreenSize|uiMode|screenLayout|screenSize"/>
<activity
    android:name="com.pkg.Interstitial"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.Transparent"  />

Я также прикрепляю свой LogCat:

07-15 04:12:41.630: E/AndroidRuntime(1301): FATAL EXCEPTION: main
07-15 04:12:41.630: E/AndroidRuntime(1301): Process: com.main.project, PID: 1301
07-15 04:12:41.630: E/AndroidRuntime(1301): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.main.project/com.library.project.MainActivity}: android.view.InflateException: Binary XML file line #187: Error inflating class com.google.android.gms.ads.AdView
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.os.Looper.loop(Looper.java:136)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at java.lang.reflect.Method.invokeNative(Native Method)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at java.lang.reflect.Method.invoke(Method.java:515)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at dalvik.system.NativeStart.main(Native Method)
07-15 04:12:41.630: E/AndroidRuntime(1301): Caused by: android.view.InflateException: Binary XML file line #187: Error inflating class com.google.android.gms.ads.AdView
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.Activity.setContentView(Activity.java:1929)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at com.library.project.MainActivity.onCreate(MainActivity.java:75)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.Activity.performCreate(Activity.java:5231)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
07-15 04:12:41.630: E/AndroidRuntime(1301):     ... 11 more
07-15 04:12:41.630: E/AndroidRuntime(1301): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.AdView" on path: DexPathList[[zip file "/data/app/com.main.project-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.main.project-1, /system/lib]]
07-15 04:12:41.630: E/AndroidRuntime(1301):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.createView(LayoutInflater.java:559)
07-15 04:12:41.630: E/AndroidRuntime(1301):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
07-15 04:12:41.630: E/AndroidRuntime(1301):     ... 21 more

Пожалуйста, дайте мне знать, как я могу использовать эти объявления в моих проектах библиотеки.

Заранее спасибо

3 ответа

Решение

Вам нужно создать папку libs/ в вашем основном проекте и физически поместить JAR- файл GooglePlayServiceLibrary в проект, а затем добавить этот Jar-файл в Java Build Path, вы должны отметить опцию jar SDK в Order and Export. Это должно быть сделано в вашем основном проекте, и в файле манифеста добавьте метаданные для GooglePlayServicesLibrary, а также определите имя действия, подобное этому, в нашем основном манифесте проектов.

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

<activity
    android:name="com.google.android.gms.ads.AdActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> 

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

Я также столкнулся с той же проблемой, и вот как я ее решаю... ура

Поскольку вы используете Eclipse, вам просто нужно щелкнуть правой кнопкой мыши на проекте, который использует библиотеку, и выбрать:

Properties -> Java Build Path -> Libraries -> Add External Jar

Обычно я делаю это для всех jar -файлов, которые требуются приложению, но похоже, что вы хотите добавить зависимости для каждой из трех библиотек в GooglePlayServiceLibrary. Если это так, проверьте ссылку ниже. Это также может быть сделано, более того - дубликаты одной и той же библиотеки (GooglePlayServiceLibrary в вашем случае) должны быть удалены из окончательного проекта.

http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

Поскольку проект может зависеть от нескольких библиотек, использующих одни и те же файлы JAR, система сборки теперь просматривает все необходимые файлы JAR, обнаруживает дубликаты, поступающие из разных библиотек, и удаляет их. Это предотвратит страшную "уже добавленную" ошибку от dx.

Попробуйте добавить это в ваш основной проект

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
<activity
    android:name="com.google.android.gms.ads.AdActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|smallestScreenSize|uiMode|screenLayout|screenSize"/>
<activity
    android:name="com.pkg.Interstitial"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.Transparent"  />

Если возникнет ошибка, добавьте GooglePlayServiceLibrary в ваш основной проект.

Другие вопросы по тегам