解压目录
使用命令扫描:
appcompat.sh --dex-file=apk路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5KjpbXh5-1636557344259)(https://user-gold-cdn.xitu.io/2018/8/31/165908a81b22de85?imageView2/0/w/1280/h/960/ignore-error/1)]
可以看到我们的项目中只有一个 深灰名单的警告。
1.1.4 调用non-sdk 接口
下图是利用各种途径使用 non-sdk 接口的结果:
访问方式 | 结果 |
---|---|
Dalvik 指令引用字段 | 引发 NoSuchFieldError |
Dalvik 指令引用函数 | 引发 NoSuchMethodError |
通过 Class.getDeclaredField() 或 Class.getField() 反射 | 引发 NoSuchFieldException |
通过 Class.getDeclaredMethod() 或 Class.getMethod() 反射 | 引发 NoSuchMethodException |
通过 Class.getDeclaredFields() 或 Class.getFields() 反射 | 结果中未出现非 SDK 成员 |
通过 Class.getDeclaredMethods() 或 Class.getMethods(). | 反射结果中未出现非 SDK 成员. |
通过 env->GetFieldID() 调用 JNI | 返回 NULL,引发 NoSuchFieldError |
通过 env->GetMethodID() 调用 JNI | 返回 NULL,引发 NoSuchMethodError |
1.2 安全相关
1.2.1 加密变更
Crypto Java 加密架构 (JCA) 提供程序现已被移除
类似写法,将会发生 NoSuchProviderException:
SecureRandom.getInstance(“SHA1PRNG”, “Crypto”)
在android P 之前的设备上,使用 Crypto 提供商,如果 target < 24 (N) 能够正常使用,如果target 24+ 则会失败
在adnrodi P 设备上 由于彻底移除了 Crypto, 因此无论 target 是何值 都会抛出异常 NoSuchProviderException
许多算法的 Bouncy Castle 版本被弃用
加密功能的 BC 提供者被移除,官方博客中这样说:
Starting in Android P, we plan to deprecate some functionality from the BC provider that's duplicated by the AndroidOpenSSL (also known as Conscrypt) provider
android P开始,BC 提供者变成不推荐,如果targetApi < P 会有日志警告 targetApi >=p (28+) 将会抛出 NoSuchAlgorithmException ,以下写法将会受影响:
Cipher.getInstance(“AES/CBC/PKCS7PADDING”, “BC”) or
Cipher.getInstance(“AES/CBC/PKCS7PADDING”, Security.getProvider(“BC”))
因此,建议不要再指定 provider 而使用默认实现。
1.3 隐私相关
后台应用访问受限
- 您的应用不能访问麦克风或摄像头。
- 使用连续报告模式的传感器(例如加速度计和陀螺仪)不会接收事件。
- 使用变化或一次性报告模式的传感器不会接收事件。
如果您的应用需要在运行 Android 9 的设备上检测传感器事件,请使用前台服务。
权限组变更
Android P 引入 CALL_LOG 权限组并将 READ_CALL_LOG、WRITE_CALL_LOG 和 PROCESS_OUTGOING_CALLS 权限移入该组。 在之前的 Android 版本中,这些权限位于 PHONE 权限组
wifi扫描权限变更:
Android 8.0和Android 8.1:
成功调用 WifiManager.getScanResults()) 需要以下任何一项权限:
- ACCESS_FINE