如何为Codename One项目正确接入Admob扩展?
正确接入Codename One Admob全屏扩展步骤
1. 统一通过POM配置引入(别混用设置程序下载)
直接在项目根目录的pom.xml里加下面的依赖,绝对别用CN1设置程序的扩展页面下载,不然会搞出配置冲突:
<dependency> <groupId>com.codenameone</groupId> <artifactId>admobfullscreen</artifactId> <version>LATEST</version> <type>pom</type> </dependency>
加完后跑mvn clean install刷新依赖,确保本地仓库能拉到构件。
2. 解决Android本地构建找不到GoogleAPIs的问题
本地用Android Studio构建时,得在android/build.gradle里加Google Maven仓库,不然拿不到Google服务依赖:
在buildscript和allprojects的repositories节点里都加上:
maven { url 'https://maven.google.com' }
同时,android/build.gradle里要引入Google服务插件:
dependencies { classpath 'com.google.gms:google-services:4.3.10' }
最后在android/app/build.gradle末尾加一行:
apply plugin: 'com.google.gms.google-services'
3. 解决云构建后Genymotion里广告弹出冻结的问题
- 代码里要正确处理线程:广告加载是网络操作,得放后台线程,显示广告要切回EDT(事件调度线程),不然会卡死UI:
Display.getInstance().callSerially(() -> { // 初始化Admob AdmobFullscreen.init("你的Admob应用ID"); }); // 加载广告放后台 new Thread(() -> { if (AdmobFullscreen.isInterstitialReady()) { Display.getInstance().callSerially(() -> { AdmobFullscreen.showInterstitial(); }); } }).start(); - 给Genymotion装完整的Google Play服务:有些镜像默认不带,得手动装对应版本的GMS包,不然Admob SDK跑不起来。
- 先用测试广告单元ID:比如插屏测试ID
ca-app-pub-3940256099942544/1033173712,避免真实广告审核问题导致加载失败。
核心注意点
- 别同时用设置程序和手动POM加扩展,会搞出依赖冲突,直接导致构件找不到。
- 所有和UI相关的Admob操作(比如显示广告)必须回EDT执行,后台只做加载。
- 云构建时,确保
codenameone_settings.properties里的android.playServicesVersion设成兼容版本,比如17.0.0。
内容的提问来源于stack exchange,提问作者Stefan Cohn
相关产品推荐
相关产品推荐

