将Google Play服务库添加到现有库项目

时间:2014-07-15 04:47:09

标签: android eclipse admob google-play-services interstitial

在我的应用程序(主项目)中,我添加了3个现有项目标记为库,所有这3个项目(库)需要 GooglePlayServiceLibrary ,以便他们可以运行AdMob和插页式广告。

我已经在我的主项目中成功添加了这3个图书馆项目,他们在没有AdMob和插页式广告的情况下工作正常(没有将 GooglePlayServiceLibrary 添加到这3个项目中),当我启动我的主要活动<来自主要项目活动的strong>库项目。但是当我将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 个答案:

答案 0 :(得分:3)

您需要在主项目中创建一个libs /文件夹,并将 GooglePlayServiceLibrary JAR 文件实际放入项目中,然后添加要将Jar文件添加到Java Build Path,您必须在订单和导出中选中标记 SDK jar。这必须在您的主项目和清单文件中为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"/> 

另外,不要忘记在库项目中添加所有正在使用的所有权限服务接收器,所有这些都应该在主项目清单中使用它们的包名来定义。

我也遇到了同样的问题,这就是我如何解决它...欢呼

答案 1 :(得分:1)

由于您正在使用Eclipse,因此您只需右键单击使用该库的项目并选择:

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

我通常会为应用程序所需的所有 jar执行此操作,但看起来您希望为GooglePlayServiceLibrary上的三个库中的每一个添加依赖项。如果是这种情况,请查看以下链接。此外,它也可以完成 - 应该从最终项目中删除相同lib(在您的情况下为GooglePlayServiceLibrary)的重复项。

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

  

由于项目可能依赖于使用相同jar文件的多个库,因此构建系统现在查看所有必需的jar文件,检测来自不同库的重复项并删除它们。这样可以防止dx中出现可怕的“已添加”错误。

答案 2 :(得分:0)

尝试将此添加到您的主项目

<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添加到您的主项目中。