添加Google Maps SDK元标签后AdMob报缺少INTERNET权限问题
问题原因
这个报错属于Android Studio Lint静态检查的假阳性误报,并非实际运行时缺失权限,核心诱因是Google Play服务(GMS)生态下多SDK的Manifest清单合并校验逻辑bug:
- 你已经在主Manifest中正确声明了
android.permission.INTERNET权限,正常编译打包后应用会持有该权限,运行时调用AdMob加载广告不会触发权限缺失崩溃。 - 当添加Google Maps SDK的两个meta配置标签后,Lint会触发GMS全模块的联合权限校验流程,此时AdMob模块的权限检查逻辑读取到的是合并过程中的临时清单快照,错误判定INTERNET权限未声明,才会给
BaseAdView.loadAd方法标红。 - 移除Maps相关meta标签后,Lint不会启动GMS跨模块校验,AdMob单独的权限检查可以正常识别主清单中声明的INTERNET权限,红线自然消失。
可行修复方案
你可以根据自己的需求选择任意一种方案处理:
方案1:抑制Lint误报(操作成本最低,不影响运行逻辑)
在调用loadAd()方法的所在类或者对应方法上添加Lint抑制注解,跳过该位置的权限检查:// 加在类上或者方法上都可以 @SuppressLint("MissingPermission") public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // AdMob初始化、加载广告的原有逻辑 } }注意:这个方案只是消除IDE的错误提示,因为权限本身已经正确声明,不会带来任何运行时问题。
方案2:强制清单合并时保留权限声明
给INTERNET权限声明添加合并规则标记,避免Lint在清单合并过程中漏识别该权限:- 先在Manifest根节点添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名">- 修改INTERNET权限声明,添加强制合并属性:
<uses-permission android:name="android.permission.INTERNET" tools:node="merge" />- 依次点击菜单栏的
Build -> Clean Project,等待清理完成后再点击Build -> Rebuild Project,等IDE索引重建完成后红线就会消失。
方案3:升级GMS相关依赖版本
这个检查bug在新版GMS依赖中已经被官方修复,你可以把模块级build.gradle中的com.google.android.gms:play-services-maps和com.google.android.gms:play-services-ads依赖都升级到官方发布的最新稳定版本,同步Gradle后不需要额外修改配置,报错会自动消失。
补充提示:不要为了消除这个报错重复声明INTERNET权限,重复声明会触发清单合并的重复项错误,反而带来新的编译问题。
内容的提问来源于stack exchange,提问作者Samithu Hettiarachchi
相关产品推荐
相关产品推荐

