Admob实施错误

2024-03-30

我在应用程序中实施 Admob 时遇到问题。

这是我的 main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
</LinearLayout>
</LinearLayout>

这是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.ollidiemaus.testmob"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".TestAdmobActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
        <activity android:name="com.google.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation"/>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>

最后这是我的活动:

public class TestAdmobActivity extends Activity {
private AdView adView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Create the adView
adView = new AdView(this, AdSize.BANNER, "a14ead58dc2a456");
// Lookup your LinearLayout assuming it’s been given
// the attribute android:id="@+id/mainLayout"
LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout1);
// Add the adView to it
layout.addView(adView);
// Initiate a generic request to load it with an ad
adView.loadAd(new AdRequest());}    
@Override
public void onDestroy() {
  adView.destroy();
  super.onDestroy();
}}

现在,当我在 AdView 中启动应用程序时,会出现一个错误:“您必须使用 configChanges 在 AndroidManifest.xml 中声明 AdActivity。”

我使用的是 Android 4.0 以及 3.2 以上的版本,但它无法正常工作。 我希望任何人都可以帮助我。


我在获取“您必须使用 configChanges 在 AndroidManifest.xml 中声明 AdActivity”时遇到了完全相同的问题。集成最新的AdMob SDK后出现错误消息。尽管我在 StackOverflow 上找到了这个问题以及其他两个相关的讨论(请参阅本文底部的链接),但它们并没有帮助我解决问题,因为对我来说,它们没有足够清楚地区分这targetSdkVersion清单和构建目标中的属性。这个答案描述了是什么为我解决了问题以及是什么造成了麻烦。

Solution

首先最简单的部分:您缺少一些标志configChanges定义的属性AdActivity在你的AndroidManifest.xml。如图所示AdMob SDK 文档 http://code.google.com/intl/de-DE/mobile/ads/docs/android/fundamentals.html定义需要如下所示:

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

第二个(也是更复杂的部分)与 SDK 目标相关:唯一似乎真正有效的解决方案是使用 SDK 管理器安装至少适用于 Android 3.2(API 级别 13)的 SDK。安装此 SDK 版本后,您需要配置 IDE 以使用此 SDK 构建项目。确切的设置取决于您使用的 IDE。就我而言,它是 IntelliJ IDEA,您可以在项目设置中找到该选项Project标题下方的页面项目SDK.

您还应该调整target您项目中的属性project.properties。如果您使用 ANT 构建版本,这一点至少很重要。该行应如下所示:

target=android-13

仅上面的配置就可以解决问题。有no所需的改变<uses-sdk>AndroidManifest.xml 中的元素阅读下面的陷阱,了解为什么这可能会导致麻烦。

解释

构建目标和<uses-sdk>元素具有完全不同的范围。

The 构建目标被评估only在构建时,由构建工具确定应使用系统上哪个版本的 SDK 工具来构建应用程序。 SDK 越新,它了解的 API 功能就越多。出于某种原因,谷歌强迫我们指定一些configChanges在 API 级别 13 之前不可用,因此我们需要至少使用 SDK 工具 13 来构建我们的应用程序,因为以前版本的 SDK 工具不知道这些新的configChanges并会报错。在运行时,构建目标没有任何意义,Android 将忽略所有元素(例如,configChanges)它不知道。

The 目标SdkVersion上指定的元素<uses-sdk>相比之下,android 清单中的元素是only在运行时评估——not在编译时。事实上,您可以在此处指定任何您想要的值,而编译器不会更改任何内容或显示错误消息。这就是为什么更改此属性并不能帮助我们解决 AdMob 问题。另一方面,在运行时,android 可能会评估该属性,以支持为旧 Android 版本构建的应用程序的某些兼容性功能。请参阅下面的陷阱部分,了解给我带来麻烦的主题。

Pitfalls

  • Do not变更集targetSdkVersion如果您无法在此 Android 版本上测试您的应用程序,请升级到更高版本:因为我误解了有关此 admob 主题的现有答案,所以我还设置了android:targetSdkVersion的属性<uses-sdk>我的应用程序中的 API 级别 13 元素,这导致了致命的副作用:由于 Android 3 认为我的应用程序本机支持蜂窝,因此它不再在底部边框的软按钮栏中显示菜单按钮,并且我的应用程序隐藏了本机标题栏显示它自己的实现,用户无法再访问蜂窝上的菜单。所以对我来说离开targetSdkVersion处于水平10帮助恢复菜单按钮并且工作正常。
  • 处理对较旧 API 的向后兼容性,这些 API 可能在 SDK 工具 13 中丢失:好的,所以我已经将构建过程设置为使用 SDK 工具 13 和我的targetSdkVersion到 10 一切都应该没问题,对吧?不幸的是没有!原因是,我的应用程序向下兼容 Android 1.5(API 级别 3),因为这仍然占我用户的 5% 左右。不幸的是,将构建目标设置为 13 后,我的代码的某些部分不再编译,因为它们引用了已弃用的方法,这些方法直到 SDK 工具 10 才受支持,但不再从 SDK 工具 11 开始(例如Service.setForeground).

描述了如何处理向后兼容性的基础知识here http://developer.android.com/resources/articles/backward-compatibility.html-- 但本文不描述如何调用不再可用的已弃用方法,因为它们会导致编译器错误。我通过创建一个由我的应用程序使用的新库项目解决了这个问题。对于这个库项目,我已将构建目标设置回 10,这将导致使用 SDK 工具 10 对其进行编译,该工具仍然了解我正在使用的 Android 已弃用的 API。然后,我的应用程序从该兼容性库调用辅助方法,这样我就可以使用更新的目标 SDK 编译我的应用程序。


相关话题

这是我发现的其他相关讨论的列表:

  • 由于 configChanges,AdMob 无法展示广告 https://stackoverflow.com/q/7902121/280384
  • AdMob SDK 4.3.1 - 我无法显示横幅 https://stackoverflow.com/q/7901018/280384
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Admob实施错误 的相关文章

  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • CardView 圆角获得意想不到的白色

    When using rounded corner in CardView shows a white border in rounded area which is mostly visible in dark environment F
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • AdMob - 同一活动上的横幅和插页式广告 - 可以吗?

    我找不到任何关于此的文档 如果您有一个锚定横幅 Admob 不允许屏幕上显示 2 个广告 我的屏幕底部始终存在一个锚定横幅 在活动之间我想实现一个插页式广告 由于插页式广告是在带有当前横幅广告的活动上调用的 这是否允许 在一个活动上考虑两个
  • 适用于 iPhone 视网膜显示屏的 AdMob 横幅尺寸

    我已将横幅尺寸设置为 320 50 对于 Retina 显示屏 我将其设置为 640 100 它根本不显示横幅 你能让我知道我犯了什么错误吗 当尺寸为 320 50 时有效 但当尺寸为 640 100 时无效 是的 您确实在 Retina
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript

随机推荐

  • 在 Java 中嵌入树状图

    我正在寻找一个能够绘图的图书馆树状图 http en wikipedia org wiki DendrogramJava中的数据 不计算它们 我可以自己做 你有任何线索吗 已经尝试通过谷歌搜索它 但没有找到任何不独立的东西 虽然我需要将生成
  • 使用 Java Graphics2D API 在 TextLayout 中将文本右对齐

    因此 我正在使用 Java 教程中的代码来绘制一段文本 但我不知道如何将文本与右边距对齐 我刚刚包括attstring addAttribute TextAttribute RUN DIRECTION TextAttribute RUN D
  • 如何使用 Hibernate 测试表是否为空

    使用 Hibernate 确定表是否为空或非空的最有效方法是什么 换句话说 该表是否有 0 行或多于 0 行 我可以执行 HQL 查询select count from tablename然后检查结果是否为 0 或非 0 但这不是最佳选择
  • Mysql errno 150 尝试使用外键引用创建表

    我正在尝试在 mysql 中创建一个带有外键引用的表 如下所示 在数据库A中 CREATE TABLE replication id varchar 255 NOT NULL PRIMARY KEY uid varchar 255 NOT
  • RESTful servlet URL - web.xml 中的 servlet 映射

    我觉得这是一个常见问题 但我研究过的都还没有起作用 在我的 web xml 中 我有所有 REST 调用的映射
  • pip3 安装 pyautogui 失败,错误代码 1 Mac OS

    我尝试安装 autogui python 扩展 pip3 install pyautogui 此安装尝试会导致以下错误消息 Collecting pyautogui Using cached PyAutoGUI 0 9 33 zip Com
  • Blazor 继承 ChildContent RenderFragments?

    假设我们有一个基本组件ParentComponent razor div ChildContent div code Parameter public RenderFragment ChildContent get set 可以这样使用
  • IOS 将 URL 字符串转换为 NSString?

    我在转换时遇到问题URL string 我从 XML 文件中提取到NSString The URL string看起来像这样 看起来很奇怪 但确实如此URL format 3CTEXTFORMAT 20LEADING 3D 222 22 3
  • Xcode 多个静态库和重复符号

    我正在开发一个 iPad 应用程序 它依赖于两个静态实用程序库 libBFSDK 和 libBetfair Platform 这两个静态库都包含 AFNetworking 当我尝试在 iPad 应用程序中包含两个静态库时 我收到如下链接错误
  • Docker-Compose 挂载卷覆盖主机文件

    我正在从 CMS 装载一个目录 其中包含 Docker 容器内的内容文件 安装绝对有效 CMS 获得了一些基本文件 这些文件在构建过程中被复制到容器中的已安装文件夹中 然后它将被挂载到主机上的某个目录中 现在容器中的文件也位于主机上 我可以
  • HDBSCAN Python 选择簇数

    是否可以在Python中的HDBSCAN算法中选择簇的数量 或者唯一的方法是使用输入参数 例如 alpha min cluster size Thanks UPDATE 这是使用 fcluster 和 hdbscan 的代码 import
  • 角度过滤器:如何进行预过滤,以便角度过滤器仅考虑整个数据对象的一部分

    我有一个包含多个列的大型数据表 从 json api 获取数据 并且想要实现多个过滤器 执行以下操作 选择应考虑哪个数据列的选项 包含 thead 选项的下拉列表 my columnFilter 进而 用于过滤特定数据部分的输入字段 my
  • 如何在C# TBB中从类别名称中获取关键字?

    我正在尝试使用 C TBB 获取类别中存在的关键字 以使用以下 DWT TBB 中的输出 为此 我有一个带有类别字段的组件 我正在尝试编写以下 C TBB 来获取关键字值 try string className package GetVa
  • 转换为 UI 的记录器条目随着时间的推移停止更新

    我有一个 javafx concurrent Task 在后台运行一些代码并使用 java util logging Logger 提供有关其状态的信息 我需要在主线程的 UI 中显示此日志条目 我怎样才能做到这一点 这是我制作的一个简单的
  • 在 Perl 中比较日期的最佳方法是什么?

    我需要读取 2 个日期并进行比较 一个日期是 current date 年 月 日 另一个是由业务逻辑决定的 然后我需要比较两个日期 看看一个日期是否早于另一个日期 我怎样才能在 Perl 中做同样的事情 我正在寻找好的文档 但我在 Per
  • Android Studio 更新后 Gradle 项目刷新失败

    这是输出 11 57 04 AM Gradle KeddreaderProject 项目刷新失败 原因 org gradle internal service ServiceLocator Ljava lang ClassLoader V
  • 将集合转换为表达式 Maple/ 将前缀更改为固定表达式

    如何将下面的集合转换为表达式 Expression a b a x y can be any operator 所需输出为 result a b a x y required output 我尝试使用下面的转换函数进行转换 asString
  • 将多个 .txt 文件合并为 csv

    Python 新手 我正在尝试将多个文本文件合并为 1 个 csv 下面的例子 文件名 csv Alpha 0 0 1 0 15 0 2 0 25 0 3 文本1 txt Alpha Beta 0 10 0 2 20 0 3 30 文本2
  • Ruby Rails - 为 AJAX 调用控制器操作构建数据

    我的网站上需要一个按钮 可以将信息发送到控制器的创建操作 页面时间 它似乎有效 尽管它没有发送我指定的所有数据 可能与我无法构建数据向量有关 我已通过以下方式在我的 config routes rb 文件中提供 POST 请求post pa
  • Admob实施错误

    我在应用程序中实施 Admob 时遇到问题 这是我的 main xml