首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JAR 的 Manifest 不会带到 APK 里,客户端必须自己在清单文件里声明权限。

JAR 的 Manifest 不会带到 APK 里,客户端必须自己在清单文件里声明权限。

原创
作者头像
用户10171634
发布2025-08-30 10:13:07
发布2025-08-30 10:13:07
760
举报

android 服务端 提供一个 public class MyContentProvider extends ContentProvider { mylibrary 模块 会生成一个jar 通过ContentResolver来访问服务端提供的数据。 客户端客户app 调用 jar 包提供的方法,需要在清单文件里声明权限 * <uses-permission android:name="com.example.myprovider.READ_PERMISSION"/> 如果jar的清单文件里如果包括 上面这句话 清单文件里声明权限,那么客户端app就可以不用加这个权限申请了吗?为什么? jar会带上清单文件吗?

这个点有点坑,我给你拆开说明:

1. Jar 包和 APK 的 Manifest

  • Jar 包(Java Archive)只是普通的 class、资源文件的打包集合,它本身不参与 Android 安装流程。
  • AndroidManifest.xml 只对最终生成的 APKAAR 有效。
  • 当你把一个 jar 放到客户端 app 里,Gradle 在打包 APK 时只会把其中的 **class 文件和资源(如果有)**打进去,不会把 jar 自己的 Manifest 合并到 APK 的 AndroidManifest.xml 里

👉 所以 jar 里的 <uses-permission> 完全没用,不会自动让客户端 app 获得这个权限。


2. 权限声明的作用

  • 声明权限() 必须写在最终 APK 的 AndroidManifest.xml 里,才能让系统在安装时提示用户授予权限。
  • ContentProvider 可以在它自己的 Manifest 里声明 <permission>,比如 android:readPermission="com.example.myprovider.READ_PERMISSION",这样外部 app 在调用时就必须具备这个权限。

👉 但客户端要调用这个 Provider,就必须 自己声明 <uses-permission>,否则调用时会报 SecurityException


3. AAR 和 JAR 的区别

  • 如果你把 mylibrary 打成 AAR(而不是 JAR),AAR 里的 AndroidManifest.xml 会在编译时合并到宿主 app 的 Manifest 里,这样 <uses-permission> 才会生效。
  • 如果只是 JAR,不会有 Manifest 合并。

结论:

  • JAR 的 Manifest 不会带到 APK 里,客户端必须自己在清单文件里声明权限。
  • 如果你希望库能自动把权限合并进去,应该发布成 AAR 而不是 JAR。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Jar 包和 APK 的 Manifest
  • 2. 权限声明的作用
  • 3. AAR 和 JAR 的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档