工程配置
1. targetSdkVersion=31及以上, minSdk 21
2. AndroidManifest.xml只能配置这些权限。
基础权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
业务包
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
3. 启动页面权限
申请权限
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_COARSE_LOCATION,
启动页面和权限页面都申请一下这些权限;但是不用强制授权
引起下架的代码
webView
onReceivedSslError 不用实现、就是程序中不要使用 onReceivedSslError方法
public class WebViewClient {
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
}
}
.android:requestLegacyExternalStorage="true" 不能配置
兼容android10 android11 android12 android13
MANAGE_EXTERNAL_STORAGE 这个权限不能注册
sdcard 内容读取的时候使用注意兼容性
照相机拍照实现效果;
-
兼容android 5.0及以后所有版本
-
方向调整,相机支持前后摄像头切换
-
需要写压缩逻辑代码
-
存储读取没有版本问题
权限合并问题
检查引入危险权限依赖工程的权限合并到AndroidManifest.xml中
引入一个http成熟使用框架;
1.支持配置header和params,上传文件。
2支持参数形式请求,
3支持application/json数据上传。
实现网络请求的loading (类似progressDialog)
带webview的activity不能用
android:exported="true"
WebView 的问题
- LollipopFixedWebView 参考链接 此写法不可用
LollipopFixedWebView会引起哥伦比亚comppay无法选中银行卡
- 拦截操作推荐使用
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
}
域名问题
正式环境下:本包只能出现自己包的域名
- 推荐其他产品
- 多产品logo
- 身份证图片等
- 人脸图片
- 等所有涉及服务器
- 正式包不要在代码中出现测试环境的ip等
开源库
避免国内大公司框架buggly,umeng等
避免注解类型(例如面向切面Aop,(AspectJ)等)
避免热更新能力
避免自动更新apk权限及代码
开源问题库(避免使用)
- AndPermission link
三方账号
google-services.json
自己创建个文件把文字粘贴一下,避免文件哈希值相同
字符串
尽量避免代码在扫描阶段因为字符串判断重复
避免直接把蓝湖或者原型中的文字粘贴到代码上。
尽可能的做个加密方式,使代码中的字符串加密解密而成
例如蓝湖中是name,代码中nxm12e ,渲染或使用的时候还是name。
涉及部分
1.string.xml
2.id和文件的命名
3.公用账号反馈sdk。密钥
https
- 避免使用不校验证书操作,不可设置跳过证书校验等方式
WebView 兼容问题要求
- WebView: 物理键返回和左上角后退键支持webview url后退。右上角必须加关闭按钮,关闭整个webview页面(没有设计的问产品或UI要下)
- scheme:支持非http或非https的协议能用系统浏览器打开
避免出现err_unknown_url_scheme 问题
- googleplay兼容:支持打开googleplay WebView url以这个("https://play.google.com/store/apps/details?id=")开头的链接用系统浏览器打开
- 设置兼容,最少添加一下设置。其他设置按自己需要添加
settings.setDomStorageEnabled(true);//是否支持 Local Storage
settings.setJavaScriptEnabled(true);//支持JavaScript
settings.setUseWideViewPort(true);//使Webview具有普通的视口(例如普通的桌面浏览器)
settings.setLoadWithOverviewMode(true);//加载完全缩小的WebView
settings.setSupportZoom(true);// 设置可以支持缩放
settings.setBuiltInZoomControls(true);// 设置启用缩放功能
settings.setDisplayZoomControls(true);//显示缩放控制按钮
5.添加打开系统浏览器开关。判断支付是否用系统浏览器打开
获取用户手机信息(大json采集)
- 防止ANR。需要开线程采集用户信息
- 防止carsh。根节点下每个大节点。try{]catch()。防止用户信息。部分崩溃了之后下面的继续还能采集。尽可能多的采集数据。
- 对采集代码中,类型抽取,(例如String转int等)。多进行判断,捕获等操作。
- 数据bean 不要用注解的方式。我们需要用混淆的方式写的;用注解的方式更容易暴漏出明文,被google 发现。
- 这个数据上传结果需要卡流程。必须确保数据上传到服务器成功之后才能进行下面的操作
- 严格意义上,不允许出现没有大json数据的订单。
异常捕获问题
不要影响三方crash 采集