我正在开发一个用于预棉花糖设备的应用程序。源代码不是我写的,项目本身也很大。我目前正在使应用程序,以请求权限时,需要。
问题是:如何找到代码中应该请求权限的所有位置?我使用的是Android Studio。
编辑
有些人建议将api更改为23,只需运行应用程序,并查看它崩溃的地方。问题是,应用程序并不是在每个地方都会崩溃。
例如,在没有权限的情况下运行以下代码将导致应用程序崩溃:
TelephonyManager manager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
而这个只返回一个空数组,而不是崩溃。
final String[] SELF_PROJECTION = new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,};
Cursor cursor = context.getContentResolver()
.query(ContactsContract.Profile.CONTENT_URI, SELF_PROJECTION, null, null, null);
而且,Android Lint不会显示这些地方。我不确定是否应该这样。
发布于 2016-02-22 22:59:37
根据关于security permissions的开发人员页面:
在几乎所有情况下,权限失败都会打印到系统日志中。
因此,运行应用程序并在日志中搜索“权限”或类似的内容。
使用单元测试来确保覆盖代码中可能需要权限的所有位置。
发布于 2016-02-24 20:47:19
添加
lintOptions {
enable 'MissingPermission'
}
在你的build.gradle
里。这将在您构建应用程序后显示警告。
发布于 2016-02-22 22:35:40
当然,编译目标api 23,不要添加权限代码,运行应用程序并查看它在哪里崩溃。
一旦你开始精确定位位置,然后翻转权限(通过应用程序设置),这样你就可以越过那个屏幕,然后关闭它们,这样你就可以看到它是否崩溃。
Logcat非常具有描述性,它让你知道权限被拒绝了……
https://stackoverflow.com/questions/35513879
复制相似问题