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实施错误 的相关文章

  • Android第一次动画不流畅

    我正在尝试一个动画将 imageView 从屏幕底部滑动到屏幕中心 但是当我第一次执行此动画时 它不平滑 但当第二次执行动画时 它是正常且平滑的 我几乎尝试了所有方法 但无法解决我的问题 这是我的动画文件
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • 无法在自定义 AOSP 上安装 Google Play 中的某些应用程序:项目不可用。理由:9

    我在尝试从 Google Play 安装某些应用程序时收到以下错误 LibraryUtils isAvailable not available restriction 9 DocUtils getAvailabilityRestricti
  • 在 Google Analytics 中跟踪应用程序版本

    我正在使用谷歌分析模块 https marketplace appcelerator com apps 5081 2014113336 https marketplace appcelerator com apps 5081 2014113
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 更新到材质 1.2.0 后,材质按钮上缺少圆角半径属性

    这是我的材质按钮代码
  • Android 启动器快捷方式

    我制作了一个简单的打卡 打卡时钟应用程序 我想向用户添加在主屏幕上创建快捷方式的选项 该快捷方式将切换应用程序的状态 超时 超时 但我根本不希望此快捷方式在屏幕上打开应用程序 这是我的 setupShortcut private void
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • Android相机意图:如何获取全尺寸照片?

    我正在使用意图来启动相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE getParent startActivityForR
  • 通过 ADB 拔出设备:“找不到服务”

    我必须测试我的应用程序在打瞌睡模式下的行为 根据文档 https developer android com training monitoring device state doze standby html testing doze 我
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • 在 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