使用AdMob运行Android应用程序时出现以下异常 我尝试了其他人给出的相同类型错误的不同想法,但仍然无法正常工作。所以我创建了一个新问题。
此项目也是使用cordova创建的,项目结构如此图片。
我在环境下使用
JDK 8
Google Play服务 - 19
jars下面是lib目录
机器人支撑-v4.jar 谷歌播放-services.jar
主要活动的Java代码
package com.aotsinc.games.android.c2c.bible;
import org.apache.cordova.CordovaActivity;
import android.os.Bundle;
import android.view.Window;
import android.widget.LinearLayout;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
public class Clues2BibleCharacter extends CordovaActivity {
private static final String AdMob_Ad_Unit = "a150e3af6a308da";
private AdView adView;
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
adView = new AdView(this);
adView.setAdUnitId(AdMob_Ad_Unit);
adView.setAdSize(AdSize.BANNER);
LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
layout.addView(adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
.build();
adView.loadAd(adRequest);
this.setIntegerProperty("loadUrlTimeoutValue", 70000);
super.setIntegerProperty("splashscreen", R.drawable.screen);
loadUrl(launchUrl);
}
}
的AndroidManifest.xml
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.aotsinc.games.android.c2c.bible" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="Clues2BibleCharacter" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity" />
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<meta-data android:name="com.google.android.gms.version"
android:value="4452000" />
</manifest>
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.gms.ads.AdView android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="a150e3af6a308da"
ads:adSize="BANNER"
ads:loadAdOnCreate="true" />
</LinearLayout>
异常
09-29 03:51:12.924: I/CordovaLog(2434): Changing log level to DEBUG(3)
09-29 03:51:12.940: W/dalvikvm(2434): VFY: unable to resolve static field 898 (AdsAttrs) in Lcom/google/android/gms/R$styleable;
09-29 03:51:12.940: D/dalvikvm(2434): VFY: replacing opcode 0x62 at 0x0009
09-29 03:51:12.944: D/AndroidRuntime(2434): Shutting down VM
09-29 03:51:12.952: W/dalvikvm(2434): threadid=1: thread exiting with uncaught exception (group=0xa4c36648)
09-29 03:51:12.952: E/AndroidRuntime(2434): FATAL EXCEPTION: main
09-29 03:51:12.952: E/AndroidRuntime(2434): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.aotsinc.games.android.c2c.bible/com.aotsinc.games.android.c2c.bible.Clues2BibleCharacter}: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.gms.ads.AdView
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.os.Looper.loop(Looper.java:137)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.ActivityThread.main(ActivityThread.java:5103)
09-29 03:51:12.952: E/AndroidRuntime(2434): at java.lang.reflect.Method.invokeNative(Native Method)
09-29 03:51:12.952: E/AndroidRuntime(2434): at java.lang.reflect.Method.invoke(Method.java:525)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-29 03:51:12.952: E/AndroidRuntime(2434): at dalvik.system.NativeStart.main(Native Method)
09-29 03:51:12.952: E/AndroidRuntime(2434): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.gms.ads.AdView
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.createView(LayoutInflater.java:620)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.Activity.setContentView(Activity.java:1895)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.aotsinc.games.android.c2c.bible.Clues2BibleCharacter.onCreate(Clues2BibleCharacter.java:21)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.Activity.performCreate(Activity.java:5133)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
09-29 03:51:12.952: E/AndroidRuntime(2434): ... 11 more
09-29 03:51:12.952: E/AndroidRuntime(2434): Caused by: java.lang.reflect.InvocationTargetException
09-29 03:51:12.952: E/AndroidRuntime(2434): at java.lang.reflect.Constructor.constructNative(Native Method)
09-29 03:51:12.952: E/AndroidRuntime(2434): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
09-29 03:51:12.952: E/AndroidRuntime(2434): at android.view.LayoutInflater.createView(LayoutInflater.java:594)
09-29 03:51:12.952: E/AndroidRuntime(2434): ... 22 more
09-29 03:51:12.952: E/AndroidRuntime(2434): Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.google.android.gms.internal.an.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.google.android.gms.internal.at.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.google.android.gms.internal.at.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434): at com.google.android.gms.ads.AdView.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434): ... 25 more
CordovaActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
LOG.i(TAG, "Apache Cordova native platform version " + CordovaWebView.CORDOVA_VERSION + " is starting");
LOG.d(TAG, "CordovaActivity.onCreate()");
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
if(savedInstanceState != null)
{
initCallbackClass = savedInstanceState.getString("callbackClass");
}
loadConfig();
}
答案 0 :(得分:1)
不要将google-play-services.jar
放在/libs/
文件夹中。相反,请参考项目中的Google Play服务库。
将库导入工作区。如果您通过sdk管理器下载,则可以在sdk/extras/google/..
中找到它。
然后通过右键单击您的项目参考=&gt;选择属性=&gt; Android =&gt;添加
此外,在您的布局中,更改xml命名空间:
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
至:xmlns:ads="http://schemas.android.com/apk/res-auto"
更新:
活动和元数据声明应在<application>
标记内,而不在外部。因此,修改您的清单如下:
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.aotsinc.games.android.c2c.bible" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="Clues2BibleCharacter" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity" />
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<meta-data android:name="com.google.android.gms.version"
android:value="4452000" />
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
答案 1 :(得分:1)
不要将xmlns:android="http://schemas.android.com/apk/res/android"
放在线性布局标记中,而是将其放在<com.google.android.gms.ads.AdView
标记中。如下图所示:
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="a150e3af6a308da"
ads:adSize="BANNER"
ads:loadAdOnCreate="true" />
如需进一步的帮助,请访问此Link