【问题标题】:java.lang.verifyerror on googleplayservices adView class instantiationgoogleplayservices adView 类实例化上的 java.lang.verifyerror
【发布时间】:2014-07-08 17:48:17
【问题描述】:

我知道这个问题已被多次询问,但我仍然无法解决问题。我尝试通过 xml 资源向我的应用程序添加横幅广告,但是当我从 xml 视图切换到图形布局或清理我的项目时,我收到以下消息:“com.google.android.gms.ads.AdView failed to实例化,

java.lang.VerifyError:在分支目标 77 处需要一个堆栈图帧。”

有时它会说分支目标是57。

我正在使用 googleplayservices sdk 版本 18。 我试过使用 java jdk 7u51 和目前的 8u5。 eclipse 版本开普勒和当前 luna。 我在 java 1.5、1.6 和 1.7 上编译过。

  1. 我已尝试将adMob.jar 文件添加到构建路径。我已经按照谷歌的所有说明(以及我在这个网站上找到的所有变体)对这封信进行了操作,但仍然没有成功。我尝试将已安装的JREs 中默认VM 的参数参数更改为-XX:-UseSplitVerifier

  2. 我尝试将 googleplayservices lib 文件夹直接添加到构建路径,并添加一个 libs 文件夹,然后将其放入其中。

  3. 我已更改顺序和导出,以便 googleplayservices 位于我的构建路径的顶部。我尝试将 googleplayservices 添加为源文件夹。

  4. 最后,我分别尝试了这些选项中的每一个以及它们的不同组合。

我已经编码一年多了,这是我第一次无法在这个网站上得到有效的答案。

这是放置横幅广告的 xml 文件:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 xmlns:ads="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">

    <com.google.android.gms.ads.AdView android:id="@+id/adView"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     ads:adUnitId="I used my real ad unit id her"
                     ads:adSize="BANNER"/>

    <rest of my layout here/>

   </LinearLayout>

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my package name"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>



<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" 
    android:debuggable="true" android:hardwareAccelerated="true">
    <meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version"/>
    <activity
        android:name="my main activity"
        android:label="@string/app_name" android:configChanges="orientation" android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.google.android.gms.ads.AdActivity"
         android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    <activity android:name=".SettingsActivity" android:configChanges="orientation" android:theme="@android:style/Theme.Black.NoTitleBar"></activity>
    <activity android:name=".HelpActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:configChanges="orientation"></activity>
    <activity android:name=".SetTimeActivity" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation"></activity>
</application>

这是错误日志中的事件详细信息:

com.google.android.gms.ads.AdView failed to instantiate.

  java.lang.VerifyError: Expecting a stackmap frame at branch target 77
Exception Details:
Location:
  com/google/android/gms/ads/AdView.onLayout(ZIIII)V @9: ifnull
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: 2a03 b600 153a 0619 06c6 0044 1906 b600
0000010: 0b10 089f 003a 1906 b600 0a36 0719 06b6
0000020: 0009 3608 1504 1c64 1507 6405 6c36 0915
0000030: 051d 6415 0864 056c 360a 1906 1509 150a
0000040: 1509 1507 6015 0a15 0860 b600 0cb1     

at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:363)
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:190)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:755)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:373)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:399)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:336)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:332)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:517)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1584)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1309)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.changed(GraphicalEditorPart.java:725)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.onTargetChange(GraphicalEditorPart.java:1196)
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.onDescriptorsChanged(LayoutEditorDelegate.java:916)
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.delegateInitUiRootNode(LayoutEditorDelegate.java:835)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$TargetListener.updateEditor(GraphicalEditorPart.java:953)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$TargetListener.onTargetLoaded(GraphicalEditorPart.java:917)
at com.android.ide.eclipse.adt.AdtPlugin$11.run(AdtPlugin.java:1749)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:136)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4147)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3764)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:236)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)

还有我的版本和构建信息:

eclipse.buildId=4.4.0.I20140606-1215
java.version=1.8.0_05
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.standard.product
Command-line arguments:  -data C:\Users\"user name"\Desktop\"my" workspace -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.standard.product

编辑:我决定在一个新的工作空间中创建一个新的 android 应用程序项目并在其中添加一个横幅广告,但它也给了我与上述相同的错误。

【问题讨论】:

  • 通过电子邮件将您的图片发送给我,我将在此处为您发布。 prem30488@gmail.com
  • 谢谢。我刚刚想出了如何添加我的代码。抱歉这是我第一次发帖。我没有意识到你必须缩进 4 个空格。

标签: java android google-play-services adview


【解决方案1】:

我解决了。我花了一周时间了解如何使用 Google Play 服务。我真的习惯添加 Admob 好几个月了。当谷歌在 8 月 1 日告诉不要使用 Admob 时,我说哦!为什么?无论如何,首先我在 Eclipse Luna 更新了所有的 SDK 和 ADT。然后我创建了我的项目,将 Google Play Services lib 导入工作区,并通过项目属性>Android>Add>libs 添加它。我没有做诸如添加到构建路径之类的事情。所有重要的部分都在您的“activity_main”文件中。我的意思是不要创建一个不同的类,如广告或某事。只需将此代码添加到您的活动文件中:

import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.ads.*;

public class Sample extends Activity {
AdView adView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

AdView adView = (AdView) this.findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest); 

希望对大家有帮助。

【讨论】:

  • 目前我所有的代码都和你上面的完全一样。我收到一个错误,因为我没有 R.id.adView。当我使用 google adMob 示例中的代码时,我得到“没有来自广告服务器的填充。无法加载广告:3。”我确保我的 adMob 配置正确,所以我知道那里没有任何问题。我还添加了我的实际手机作为测试设备,我得到了所有相同的错误。所以不是模拟器。
  • 我实际上在测试模式下运行带有广告设置的应用程序,但它仍然无法填充。所以我认为这不仅仅是那个错误,但我没有其他任何东西可以帮助我弄清楚是什么。
【解决方案2】:

为此打开了一个问题 76114,并提供了适用于 Android Studio 的解决方法: https://code.google.com/p/android/issues/detail?id=76114

要解决 Eclipse SDK:

  1. 编辑 SDK_HOME\eclipse\eclipse.ini
  2. 添加一个新行: -XX:-UseSplitVerifier
  3. 重启 Eclipse。

【讨论】:

  • 我尝试了 eclipse 的解决方法,但没有运气。从那以后,我将所有项目都迁移到了 Android Studio。也感谢您提供该问题的链接。我没有意识到这一点。
【解决方案3】:

您发布的错误是 Eclipse 中的错误。 它不会阻止您的应用程序运行。

“广告服务器未填充”表示您的应用运行正常,但没有可展示的广告。这是一条正常的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多