首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

写了一个适配 Android12-exported 小插件

背景 从 Android12 开始,如果我们 tagSdk >=31, 即以 Android 12 或更高版本为目标平台时,且包含使用 intent 过滤器 activity、服务或广播接收器,则必须为这些应用组件显式声明...如果你满足上述条件,并且 tagSdk>=31 ,而未声明 exported 属性,则在不同 Agp 版本有着以下不同提醒方式: Agp7.0 及以上, build 时会出现下面的报错: Manifest...以下 则并不会在编译时报错,而是安装后打开相关页面时报错,相应Android Studio 以 ⚠️ 样式提醒你添加 exported 。...添加插件 主app Model添加: apply plugin: 'com.xiachufang.manifest.exported' 或 plugins { id 'com.xiachufang.manifest.exported...,编译也不会报错,但此时运行在Android12 手机上时,就会出现相应报错提示。

73010

重要变更 | Android 11 软件包可见性

如果想获取更多别的已安装应用列表信息,则需要在应用内 Android manifest 添加 元素,从而拓宽访问范围。...您可以将 API Level 设为 30,并使用 Android Studio 3.2 以上和最新发布相应 Android Gradle 插件,即可在应用添加 元素。...如果您使用了 ,或者是依赖了支持 Android 11 库或 SDK,则可能会引起 manifest 冲突从而出现合并 manifest 错误。...例如,构建应用时, Build Output Window 可能会看到以下错误: Android resource linking failed /Users/sample/AndroidStudioProjects...> Build Output Window 可能还会出现这样一条错误信息,引导您去查看 Manifest 合并日志 (Manifest merger logs): Manifest merger

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android6.0权限适配及兼容库实现

权限申请 本文并不关心权限适配原理,原理可以参考Android权限管理原理 ,这里只是针对6.0表现做适配,先思考以下几个问题: 为什么6.0权限需要适配 什么权限需要动态适配 怎样动态适配权限...怎么样实现第三方库,简化代码及适配流程 权限兼容库 PermissionCompat 对于国产ROM影响 为什么6.0需要权限适配 6.0之前Android权限都是安装时候授予,6.0...实现步骤 1、Manifest列出来 无论普通权限还是敏感权限,都需要在Manifest列出来,同时也是对6.0之前版本一种兼容。..."/> 2、需要时,显示请求 权限没被授予前提下,系统显示授权对话框,让用户操作,目前授权对话框不可定制,不过可以申请之前添加一些解释,告诉用户为什么需要该权限,但是Google提醒,不要做过多解释...基于APT与注解,编译过程中生成代码,自动添加回调 1、基于APT,定义一系列Annotation,并动态生成辅助Listener类 2、添加Android支持库,基类统一处理回调, 3、添加工具类,

78420

拖不得了,Android11真的来了,最全适配实践指南奉上

元数据文件声明“无障碍”按钮使用情况 “从 Android 11 开始,您无障碍服务无法在运行时声明与系统“无障碍”按钮关联。...如果您应用以 Android 11 为目标平台并且某项前台服务访问这些类型数据,您需要在该前台服务声明 foregroundServiceType 属性添加 camera 和 microphone...” 举例,如果应用某项前台服务需要访问位置信息、摄像头和麦克风,那么就这样添加: <service ......fdsan 检测错误处理文件描述符所有权错误,例如 use-after-close 和 double-close。 Android 11 ,fdsan 默认模式发生了变化。...无障碍操作 “以前 Android 版本,框架向未正确处理基于点击无障碍操作微件分派触摸事件。通常,这些视图直接处理触摸事件,而不是注册点击监听器。

6.6K340266

UniApp实战:动态数据(uni.request封装、uni.getLocation获取定位等)

有人肯定会问,人家uni.request()已经挺好了,为什么封装一次了? 其实上图代码已经给你答案了:可以全局处理所有的请求。...当然你可以通过options参数来控制某个请求不需要loadin; 2、可以给所有请求添加请求头,比如需要验证权限接口; 3、错误集中处理,判断错误码,处理所有请求错误,如token过期,都会去登录页面等...二、获取当前位置 获取当前地理位置、速度。 微信小程序,当用户离开应用后,此接口无法调用;当用户点击“显示聊天顶部”时,此接口可继续调用。...小程序如果获取经纬度还需要添加配置,修改根目录下manifest.json文件 ? ? ?...云打包时需要在manifestSDK配置填写Appkey。manifest可视化界面有详细申请指南。离线打包自行在原生工程配置。

18.7K2120

Android 高德地图API(详细步骤+源码)一

--定位service--> 然后添加manifest标签下添加如下权限。..." /> 最后application标签下添加高德访问key <!...刚才AndroidManifest.xml配置了比较多权限,而在实际使用过程Android6.0之后有一些权限是需要用户动态申请,比如定位、获取手机状态、文件读写之类。...[o9gv80ic1z.png]   注意initLocation()调用在checkingAndroidVersion()之前,你可能为什么,那是因为你想定位,那么首先要先配置一些参数,配置好之后才能启动定位...();//获取GPS的当前状态 还可以获取信息之后,将定位给停止 //停止定位后,本地定位服务并不会被销毁 mLocationClient.stopLocation(); 页面销毁时同时销毁本地定位服务

6.5K62

应用启动性能 | 介绍 App Startup 库

准确地说,您在 build.gradle 文件添加了一行代码来使一个开发库作为工程依赖项,大功告成 (当然您还需要在工程调用这个库 API,要不然您为什么添加它呢?)。...敞开您心扉 - Content Provider Content provider 是 Android 不同应用之间共享数据方式。...合并 Manifest 我针对 Android 应用清单交互操作基本上都发生在工程自生成 Manifest.xml 文件,我会通过编辑该文件来添加 activity、服务和权限。...为了工程中使用 WorkManager,我应用 build.gradle 文件添加了如下依赖: // 查看最新版本号 https://developer.android.google.cn...我合并后 manifest 文件中发现了启动时间延迟原因,您可以查看 Manifest.xml 文件时,通过点击 Android Studio 编辑窗口左下方 Merged Manifest

43020

App和SDK开发必看 | 个推分享Android12适配指南

具体实现也比较简单,开发者application添加以下代码即可: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { StrictMode.setVmPolicy...requestCode, String[] permissions, int[] grantResults) { } 在前端界面将会出现弹框如下: ④ 第③种情况下,根据用户选择,会出现以下几种情况...针对此情况,个推提出了两个可参考方案: ①SDK中新增⼀个透明中转 Activity, 通知点击启动这个透明Activity 之后, 透明Activity onCreate 方法再启动目标服务或者广播...Android12系统下,开发者如果想要使用精确闹钟,则需要**** AndroidManifest.xml 文件添加该权限申请: setAlarmClock() setExact() setExactAndAllowWhileIdle...() 如下图,用户 设置>应用>特殊应用权限>闹铃和提醒 可以看到需要精确闹钟权限应用列表: 并且,用户可以为某一特定应用手动关闭或打开该权限: 总结 Android12新特性还有很多,比如添加

1.5K20

PermissionX重磅更新,支持自定义权限提醒对话框

这位朋友说,PermissionX8.0系统获取后台定位权限,该权限直接进入deniedList,也就是拒绝列表当中。 为什么出现这个现象呢?...因为ACCESS_BACKGROUND_LOCATION是Android 10系统引入新权限,8.0系统并没有这个权限。 ? API level 29就是Android 10系统意思。...我认为这样是可以解决问题,但是根据目前得到一些反馈,Fragment中使用PermissionX可能造成一种IllegalStateException。 ?...根据stackoverflow上解答(解决Android问题神网站),当我们Fragment再去添加另一个子Fragment时,应该使用ChildFragmentManager而不是FragmentManager...上述代码permissionMap以及buildPermissionsLayout()方法其实就是处理这个逻辑,根据传入权限来获取其相应权限组,然后动态添加到对话框当中。

1.5K10

Android 12 自动适配 exported 深入解析避坑

新脚本 而目前基于这个问题,这里提供了如下脚本, gradle:4.2.0 & gradle-6.7.1-all.zip 以及 7.0 版本上,该脚本作用是在运行时自动帮你打印出现问题 aar...image 具体为什么之前脚本高版本 AGP 下无法使用,原因在于新版本 processDebugMainManifest ,或者说 processXXXXXXMainManifest 处理逻辑发生了变化...,通过找到 processDebugMainManifest 实现类,可以看到问题出现就是在于 Merging library manifest 。...mergeManifestsForApplication -> MainfestMerger2 错误 Merging library manifest 阶段出现异常,但是这个阶段 task...最后 最后再说一个坑 ,如果你是低版本 Gradle 可以打包成功,但是运行到 Android12 机器时候,可能因为没有 exported 遇到安装失败问题: 1、如果是模拟器 12,你可能会看到如下所示错误提示

1.4K30

Gradle For Android(2)--基础定制构建

applicationId属性重写Manifest.xmlpackageName。...因此,这也就是为什么Android Tool团队减弱了packageName这两个用途。定义ManifestPackageName仍然会用于SourceCode以及R文件。...buildType代码块定义了构建不同类型App地方。后续再详细说明。 dependencies代码块是标准Gradle配置一部分,这也就是它为什么会在android代码块之外原因。...Lint Report 当Assemble一个Release版本时,Lint将检查可能导致App Crash问题。如果找到的话,就会中断Build,并且Command-Line打印出错误。...如果有多个错误,则通过HTMLReport报告然后滑动到报错位置就可以看到了。 Android Studio,右侧Gradle窗口双击对应Task即可开始执行。

53830

腾讯会议10秒编译百万代码|鹅厂编译加速标杆案例公开

4.1 匹配产物 前面我们提到发布产物时,是通过回溯查找每个commit对应base_manifest.json 来确定最近一次发布 commit。...那么匹配当前可用产物也是类似的逻辑,通过回溯来找到最近有发布 commit,整个 module 增量构建流程如下: 通过回溯 commit ID 找到最近一次发布 base_manifest.json...通过回溯 commit ID 找到最近一次发布 base_manifest.json。...build - 使用 generate 生成编译命令执行编译 对于 Android 来说,cmake 是属于 gradle 管理一个子编译系统,构建Android 时候 gradle 执行 cmake...但问题是我们必须得 gradle configure 之前获取依赖关系,因为 dependencies{} 添加依赖是 gradle configure 阶段生效

1.5K80

绕过安卓SSL验证证书常见四种方式

在此之前,移动端应用程序直接忽略掉所有的SSL错误,并允许攻击者拦截和修改自己通信流量。但是现在,很多热门应用程序至少检查证书链是否是一个有效可信任证书机构(CA)颁发。...1, SSL MitM 为什么我们要特别关注移动端应用程序SSL MitM安全情况呢?为了观察或对移动端应用程序Web服务调用情况,我们需要使用类似BurpSuite或ZAP这样拦截代理。...默认配置下,使用了类似TLS或HTTPS安全连接信任预安装系统CA,而Android 6.0(API Level23)及以下版本默认新人用户添加CA。 这意味着什么呢?...目标API Level定义AndroidManifest.xml文件‘platformBuildVersionCode’属性(’manifest’元素): <manifest xmlns:android...接下来,我们工作目录应该会出现一个名叫‘test_app.objection.apk’文件(默认情况下,工具会在原始APK文件名后面添加一个.objection后缀)。

2.5K20

腾讯会议10秒编译百万代码|鹅厂编译加速标杆案例公开

4.1 匹配产物 前面我们提到发布产物时,是通过回溯查找每个commit对应base_manifest.json 来确定最近一次发布 commit。...那么匹配当前可用产物也是类似的逻辑,通过回溯来找到最近有发布 commit,整个 module 增量构建流程如下: 通过回溯 commit ID 找到最近一次发布 base_manifest.json...通过回溯 commit ID 找到最近一次发布 base_manifest.json。...build - 使用 generate 生成编译命令执行编译 对于 Android 来说,cmake 是属于 gradle 管理一个子编译系统,构建Android 时候 gradle 执行 cmake...但问题是我们必须得 gradle configure 之前获取依赖关系,因为 dependencies{} 添加依赖是 gradle configure 阶段生效

64630

个推推送Android问题检测

相关权限是否全部添加。 3.      manifest.xml相关配置是否有添加。 4.      SDK版本是否过旧。 5.      很大部分原因是因网络不稳定导致。 6.     ...6、为什么CID和APPID绑定错误,导致消息接收不到? 1.     ...9、服务端调用接口给应用推送消息,为什么个推平台里没有这条推送记录呢? 调接口发送,不会在这个发送记录,等到第二天会出现在推送报表任务发送记录。...10、android客户端为什么一定要加android.permission.WAKE_LOCK这个权限? 为了能使SDK进程在后台正常运行。...11、CID在哪些情况下变或失效 Android: 1.      用户超过三个月未登录,之后再登录重新生成一个CID 2.

2K70

Android开发(第一行代码 第二版) 常见异常和解决办法(基于Android Studio)(一)

添加jar包方法 4.Android studio卡在waiting for target device to come online 5.studio3以后版本重写父类方法出现androidx.annotation.NonNull...即出现以下弹窗 ? 即可进行你需要操作。 在网上出现解决此问题方法一般是CMD解决,但是会出现问题,如 ?...Manifest merger failed with multiple errors, see logs 完成一个Project运行时,出现build failed报错,就很迷茫,到底是哪里出问题了...意思大概是说调用了一个空对象不存在方法,但是我Button明明是存在啊,为什么这样呢?...如图,出现这样提示信息即表明活动间正常切换了,对APP操作也可正常进行,如此便可以不同活动随意切换了。

2.5K11

Android6.0蓝牙开发获取附近低功耗蓝牙设备结果权限问题分析

开发前期一直使用低版本(Android6.0以下)手机进行测试,没有任何问题。在运行到Android6.0手机上后,出了一个问题。.....permission to get scan results : 获取扫描结果需要位置权限, i>,接下来就是往Androidmanifest.xml配置文件添加权限 但是就算是添加了权限,获取扫描结果时依旧提示Need...permission...问题,这是为什么呢?...因为Android6.0一些权限需要在代码动态申请 ii>,于是需要在代码动态申请所需要权限 //Android6.0需要动态申请权限 if (ContextCompat.checkSelfPermission...并且该activity重写onActivityResult方法,在位置开启成功后去申请权限,当然除了代码申请在清单配置文件也是需要写,如果未开启位置信息则进行其他处理 @Override

1.5K100

Android 应用启动性能 | 延迟初始化

上一篇文章 ,我展示了 content provider (它出现在应用合并后 manifest 文件) 是如何在应用启动时候自动加载第三方库以及模块。...您可以通过如下三步实现上述操作,首先在您工程 build.gradle 文件添加应用启动库作为依赖,其次为每一个需要初始化库创建一个 Initializer,最后您工程 Manifest.xml...最后,我 Manifest.xml 文件 代码块添加了两个 provider 标签。...标签很重要,因为它表示需要 Android Studio 删除自动生成 provider,而该 provider 是 build.gradle 文件添加 WorkManager 后生成。...如果是这样的话,为什么要因为只某个特殊代码路径需要而在应用启动时花时间初始化一个很大库呢?为什么不等到这个库真正被需要时候再引入相关初始化开销呢?

59720
领券