区别基于Binder实现的BroadcastReceiver,LocalBroadcastManager 是基于Handler实现的,拥有更高的效率与安全性。安全性主要体现在数据仅限于应用内部传输,避免广播被拦截、伪造、篡改的风险。简单了解下用法:

  • 自定义BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do SomeThing Here
}
}
• 注册Receiver
MyReceiver myReceiver = new MyReceiver();
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter();
filter.addAction(“MY_ACTION”);
localBroadcastManager.registerReceiver(myReceiver, filter);
• 发送本地广播
Bundle bundle = new Bundle();
bundle.putParcelable(“DATA”, content);
Intent intent = new Intent();
intent.setAction(“MY_ACTION”);
intent.putExtras(bundle);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
• 在Activity销毁时取消注册
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(myReceiver);
}
Application相关属性配置
• debugable属性 android:debuggable=[“true” | “false”]
很多人说要在发布的时候手动设置该值为false,其实根据官方文档说明,默认值就是false。
• allowBackup属性 android:allowBackup=[“true” | “false”]
设置是否支持备份,默认值为true,应当慎重支持该属性,避免应用内数据通过备份造成的泄漏问题。
三、WebView安全
• 谨慎支持JS功能,避免不必要的麻烦。
提到对于Android4.2以下的JS任意代码执行漏洞,Android4.2以下?不必支持了吧!
• 请使用https的链接,第一是安全;第二是避免被恶心的运营商劫持,插入广告,影响用户体验。
• 处理file协议安全漏洞
//若不需支持,则直接禁止 file 协议
setAllowFileAccess(false);
setAllowFileAccessFromFileURLs(false);
setAllowUniversalAccessFromFileURLs(false);
• 密码明文保存漏洞
由于webView默认开启密码保存功能,所以在用户输入密码时,会弹出提示框,询问用户是否保存。若选择保存,则密码会以明文形式保存到 /data/data/com.package.name/databases/webview.db中,这样就有被盗取密码的危险。所以我们应该禁止网页保存密码,设置WebSettings.setSavePassword(false)
• 开启安全浏览模式
<meta-data android:name=“android.webkit.WebView.EnableSafeBrowsing”
android:value=“true” />
…
启用安全浏览模式后,WebView 将参考安全浏览的恶意软件和钓鱼网站数据库检查访问的 URL ,在用户打开之前给予危险提示,体验类似于Chrome浏览器。
四、数据存储安全;
• 秘钥及敏感信息
此类配置应当妥善存放,不要在类中硬编码敏感信息,可以使用JNI将敏感信息写到Native层。
• SharePreferences
首先不应当使用SharePreferences来存放敏感信息。存储一些配置信息时也要配置好访问权限,如私有的访问权限 MODE_PRIVATE,避免配置信息被篡改。
• 签名配置signingConfigs
避免明文保存签名密码,可以将密码保存到本地,无需上传版本控制系统
在app目录下建立一个不加入版本控制系统的gradle.properties文件:
STORE_PASSWORD = qwer1234
KEY_PASSWORD = demo1234
KEY_ALIAS = demokey
gradle将自动引入gradle.properties文件,可以直接在buld.gradle文件中使用:
signingConfigs {
release {
try {
storeFile file(“E:\FDM\Key\demo.jks”)
storePassword STORE_PASSWORD