You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GMS 20.2.0的Android AdMob代码编译报错问题咨询

编译报错:public类MainActivity需对应同名文件的解决方法

报错信息

Interstitial.java:60: error: class MainActivity is public, should be declared in a file named MainActivity.java

问题描述

我有一个已存在的Interstitial.java文件,为适配新版Google Ads格式对其修改后出现上述编译报错。请问只需将代码移至MainActivity.java文件即可,还是需要同时修改代码?另外我已添加main_activity.xml文件,Android Studio界面无报错但编译时出现该问题。

相关代码

main_activity.xml内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SDLActivity">
</LinearLayout>

Interstitial.java修改后的代码

package org.libsdl.app;

//* ADMOB
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
//import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.interstitial.InterstitialAd;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
// */

import android.app.Activity;

//* ADMOB
import android.content.Context;
import android.util.Log;
import java.io.IOException;
// */

public class MainActivity extends Activity {
    private static final String TAG = "MyActivity";
    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });
        AdRequest adRequest = new AdRequest.Builder().build();

        InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest,
                new InterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                        // The mInterstitialAd reference will be null until
                        // an ad is loaded.
                        mInterstitialAd = interstitialAd;
                        Log.i(TAG, "onAdLoaded");
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                        // Handle the error
                        Log.d(TAG, loadAdError.toString());
                        mInterstitialAd = null;
                    }
                });
    }

// */
}

解决步骤

  1. 必须迁移文件:Java语法强制要求public类的名称和文件名完全一致,所以你需要把MainActivity类的所有代码移到MainActivity.java文件中(文件要放在org.libsdl.app包目录下,和原Interstitial.java同路径)。

  2. 补充缺失的导入语句:当前代码缺少几个关键类的导入,会导致迁移后仍报错,需在MainActivity.java中添加:

    import android.os.Bundle;
    import com.google.android.gms.ads.LoadAdError;
    import androidx.annotation.NonNull;
    
  3. 修正布局文件的上下文指向:main_activity.xml中的tools:context=".SDLActivity"和你的Activity类名不匹配,建议修改为:

    tools:context=".MainActivity"
    
  4. 清理无效注释:代码末尾的// */属于无效注释,建议删除,避免潜在的语法问题。

完成以上操作后,重新编译即可解决报错。

内容的提问来源于stack exchange,提问作者user2511756

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:53:22