危险权限声明
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE); }
权限分组逻辑
ACCESS_FINE_LOCATION
| 定位功能 |WRITE_EXTERNAL_STORAGE
| 文件读写 |READ_CONTACTS
| 获取联系人信息 | 组件暴露风险
android:exported="false"
的 Activity
、Service
、Receiver
可能被外部应用调用。 <activity android:name=".MainActivity" android:exported="false"> ... </activity>
WebView安全隐患
file
协议访问: <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:webViewClient="true" />
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
代码混淆与反调试
-keep class . { ; } -dontwarn android.support.
启动时间检测
adb shell am start-activity
测量冷启动时间,目标控制在 3秒内。 内存泄漏检测
BroadcastReceiver
、未关闭 Cursor
、静态引用持有上下文。耗电分析
AlarmManager
。 屏幕适配
dp
/sp
单位,避免写死像素值。系统版本兼容
defaultConfig { minSdkVersion 21 // Android 5.0 }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0+ 特有逻辑 }
厂商ROM适配
Android 10+
移除了第三方后台启动限制。 个人信息收集声明
AndroidManifest.xml
中声明隐私政策网址: <application android:name=".App" android:usesCleartextTraffic="true"> <meta-data android:name="com.example.privacy_policy" android:value="https://xxx.com/privacy" /> </application>
SDK合规性
集成第三方SDK需确认其符合《个人信息保护法》要求,避免违规采集用户数据。
Lint检查
./gradlew lint
。依赖库安全性
build.gradle
中的依赖库版本,避免使用已知破绽版本(通过 dependencyCheck
插件)。解答:
解答:
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); JobInfo job = new JobInfo.Builder(jobId, new ComponentName(this, MyJobService.class)) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); jobScheduler.schedule(job);
WorkManager.getInstance(context).enqueue(new OneTimeWorkRequest.Builder(MyWorker.class).build());