Android Studio编译报错:无法找到Manifest类的问题求助
解决Android Studio中
cannot find symbol class Manifest报错及权限检查问题 首先咱们先快速搞定当前的编译阻塞,再深挖不同环境的差异原因:
1. 修正权限代码的Manifest引用逻辑
你现在导入的是自己项目包下的tld.domain.appname.Manifest,但系统权限的常量其实都在android.Manifest类里,完全不需要依赖自定义的Manifest类。给你两种简单修复方式:
- 替换导入语句:把错误的
import tld.domain.appname.Manifest;直接换成import android.Manifest;,这样原代码里的Manifest.permission.MANAGE_ACCOUNTS就能正常识别了。 - 用全限定名直接引用:如果不想加导入,把代码里的
Manifest.permission改成android.Manifest.permission即可,示例代码如下:
int permissionCheck = ContextCompat.checkSelfPermission(mView.getTarget(), android.Manifest.permission.MANAGE_ACCOUNTS); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(mView.getTarget(), new String[]{android.Manifest.permission.MANAGE_ACCOUNTS}, Constants.PERMISSION_REQUEST_MANAGE_ACCOUNTS); }
2. 修正权限声明的标签错误
注意你写的权限声明是<permission android:name="android.permission.MANAGE_ACCOUNTS" />,这是自定义权限的写法,而申请系统自带的权限必须用<uses-permission>标签,所以要改成:
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
这个小错误可能会导致你即使申请权限成功,应用也拿不到实际的权限权限,得赶紧改过来。
3. 排查其他环境能编译的原因
其他Android Studio环境能保留错误导入还正常编译,大概率是这几种情况:
- AGP版本差异:不同版本的Android Gradle Plugin对Manifest文件的处理逻辑不一样,旧版本可能会自动生成项目包下的Manifest类,新版本取消了这个行为。去对比下两个环境的项目级
build.gradle里AGP的版本号。 - 代码生成工具差异:项目里可能有注解处理器(比如旧版Dagger、ButterKnife)或自定义代码生成脚本,在其他环境中自动生成了
tld.domain.appname.Manifest类,当前环境没触发生成。可以去build/generated目录下找找有没有这个类的生成文件。 - 缓存问题:其他环境的Gradle缓存里存着之前生成的Manifest类,当前环境的缓存被清掉了。可以试试在当前环境执行
File > Invalidate Caches... > Invalidate and Restart,不过更推荐用前面的方法修正引用,别依赖这种不稳定的生成类。
内容的提问来源于stack exchange,提问作者João Costa
相关产品推荐
相关产品推荐

