无NDK环境下如何创建Android.mk以实例化Notification.TvExtender()
@SystemApi标注的Notification.TvExtender实例化相关问题解答
核心认知偏差说明
- 公开教程中提到的修改Android.mk的操作,仅适用于AOSP原生系统源码编译的场景:目的是把应用作为系统组件打包进系统镜像,获得系统签名权限来调用SystemApi,和普通第三方应用开发的流程完全无关,你的项目从一开始就不需要创建这个文件。
- Android.mk是AOSP编译体系、传统ndk-build原生编译流程的专用构建脚本,现代Android Studio默认采用AGP(Android Gradle Plugin)+CMake的构建逻辑,没有额外配置的前提下,构建系统根本不会扫描jni目录下的Android.mk,自然无法正常识别显示。
- 你的项目没有NDK开发需求、没有原生C/C++代码编写场景,手动创建Android.mk本身就是无效操作,完全不需要走这条路径。
对应需求的正确落地方案
要实例化被@SystemApi标注的Notification.TvExtender,全程不需要接触NDK、不需要创建Android.mk,可直接按以下逻辑实现:
- 先明确API权限规则:@SystemApi标注的类仅在compileSdk编译阶段做了访问隐藏,该类在设备运行时的系统框架层是真实存在、可以被调用的。
- 基础实现逻辑:通过反射方式实例化
Notification.TvExtender,调用对应方法,绕开编译期的隐藏API检查即可,不需要修改任何构建脚本。 - 编译期报错消除配置:如果需要消除代码编写阶段的类找不到、方法不可见的编译报错,直接在模块级
build.gradle中配置隐藏API访问规则即可:- 对齐compileSdk版本到30,和源码中该类的定义版本匹配
- 在android配置块中添加编译参数,调整非SDK接口的访问检查阈值
- 按系统规则配置targetSdk版本,匹配对应的非SDK接口反射访问权限
关于jni目录下Android.mk无法被识别的问题说明
以下操作和你的业务需求完全无关,不推荐执行
如果确实需要让手动创建的Android.mk被构建系统识别,需要满足以下全部配置前提:
- 在Android Studio的SDK Manager中安装完整的NDK、原生构建工具、LLDB组件
- 在模块级
build.gradle的defaultConfig块中添加externalNativeBuild配置,显式指定使用ndk-build作为原生编译引擎,关联jni目录下的Android.mk脚本路径 - 完成配置后执行项目同步,构建系统才会加载识别对应的mk文件
内容的提问来源于stack exchange,提问作者Edna Krabappel
相关产品推荐
相关产品推荐

