我正在尝试将 Admob 广告添加到 C++ Android 游戏中。该游戏使用 NativeActivity,根本不提供任何 Java 代码 - 都是纯 C++ 和 JNI 代码。
我已按照 Admob C++ 说明 集成 gma 库等,但每当我运行该应用程序时,我都会得到以下信息:
AndroidRuntime: java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.MobileAdsInitProvider" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/base.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_assets.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_config.en.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_config.mdpi.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_config.x86_64.apk!/lib/x86_64, /system/lib64]]
AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:6396)
AndroidRuntime: at android.app.ActivityThread.installContentProviders(ActivityThread.java:5938)
AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5853)
AndroidRuntime: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
AndroidRuntime: at android.os.Looper.loop(Looper.java:193)
AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6669)
AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.MobileAdsInitProvider" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/base.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_assets.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_config.en.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_config.mdpi.apk!/lib/x86_64, /data/app/uk.co.realityjump.strikers-6gN2VT-l2i1JT_PJjaUraA==/split_config.x86_64.apk!/lib/x86_64, /system/lib64]]
AndroidRuntime: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
AndroidRuntime: at android.app.AppComponentFactory.instantiateProvider(AppComponentFactory.java:121)
AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:6380)
AndroidRuntime: ... 10 more
我发现的这个问题的所有解决方案都集中在确保 APPLICATION_ID 元数据填充在 AndroidManifest.xml 中。我已经这样做了,没有什么区别。
我的 AndroidManifest.xml 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk
android:minSdkVersion="28"
android:targetSdkVersion="33" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<application
android:hasCode="false"
android:resizeableActivity="false"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:hardwareAccelerated="true"
android:appCategory="game">
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY" />
<activity android:name="android.app.NativeActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">
<meta-data android:name="android.app.lib_name"
android:value="my-game-name" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我将我的代码与 gma testapp 中的代码进行了比较,我看不到任何相关的差异。任何建议表示赞赏!
我发现问题了! AndroidManifest.xml 有
hasCode="false"
- 在我开始尝试使用 Admob 库之前都是如此!
删除此属性可以解决该问题。