文档中心 > 阿里聚安全

安全组件-开发环境配置(Android)

更新时间:2016/09/26 访问次数:6688

1.下载安全组件SDK

请在阿里聚安全网站(http://jaq.alibaba.com)下载安全组件SDK,具体步骤请查看下载安全组件文档

将安全组件SDK下载到本地,然后解压,目录结构如下:

其中, android-client.zip为客户端SDK;yw_1222_0335.jpg为客户端安全加密图片;server.zip为服务器端SDK;conf.properties为服务器端对应密钥文件。

解压android-client.zip,里面会包含一个Android.SecurityGuardSDK. ${version}.tar.gz文件,解压之后目录结构如下:

从上图中可以看到,安全组件SDK分为两种版本,一种是Android Studio使用的aar,另一种是Eclipse使用的jar和so,两种版本功能一致,可以根据接入方式选择对应版本(当然,Android Studio也可以使用jar和so的形式接入),如下表所示:

AndroidStudio Eclipse
SecurityGuardSDK-${version}.aar SecurityGuardSDK-${version}.jar libsgmain.so

注意:免费的基础版只包含SecurityGuardSDK这一个组件。如果需要更多、更强的安全功能,可以联系阿里聚安全团队获取企业版(包含数据风控SecurityBodySDK和无痕验证码NoCaptchaSDK),接入方式基本相同。

2.集成前准备

安全组件SDK在阿里巴巴的很多开放SDK中都有包含,如果你的APK中同时引入了这些SDK,则在集成安全组件SDK之前需要将这些SDK(阿里百川,支付宝开放SDK等)中包含的安全组件(.jar、.aar文件)、图片文件(yw_1222*.jpg)全部删掉。

3.开发流程

根据接入方式不同使用不同方式导入SDK,Android Studio使用aar方式导入,Eclipse使用jar和so方式导入。

3.1 Android Studio导入aar

如图把所有的aar都复制到项目的libs目录下,然后在该Module的build.gradle中增加如图配置:

3.2 Eclipse导入jar包和so

把SDK中的所有的jar包和so文件都复制到工程的libs目录下:

目前提供两种架构下的so文件,armeabi是针对arm架构编译的包,x86是针对x86架构编译的包。应用程序在不同cpu架构的机型里会选择相应的so文件加载。

注意: 如果在想在x86的模拟器上运行你的程序,必须导入x86架构的so,但是可以在应用发布时去掉x86目录下的so。

3.3 导入加密文件

第一步中已经得到了加密文件yw_1222_0335.jpg,现在需要把这个加密文件导入到工程中 res\drawable\目录下,如果没有这个文件夹,请先创建。
下方左图为Android Studio中安全加密图片位置,右图为Eclipse中安全加密图片位置。

3.4 添加权限信息

如果是Android Studio项目,则不需要在项目中额外配置权限,因为在aar中我们自己已经声明了权限。

如果是Eclipse项目,需要在AndroidMenifest.xml文件中添加下列权限配置:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

3.5 添加ProGuard配置

如果使用了proguard进行混淆,也根据接入方式的不同而分为Eclipse和AndrodStudio两种情况。

Eclipse:

如果在project.properties中指定了proguard配置,比如在project.properties中有如下的语句:proguard.config=proguard.cfg,则表明使用了proguard进行混淆,混淆配置在proguard.cfg文件中:

Android Studio:

如果在build.gradle中配置了proguardFiles,并且开启了minifyEnabled,如图所示,则表明使用proguard-rules.pro这个配置文件进行混淆。

为了保证我们需要的一些类不混淆,因此需要在proguard的配置文件中添加一些指令,也就是加入以下配置到proguard的配置文件里面:

-keep class com.taobao.securityjni.**{*;}
-keep class com.taobao.wireless.security.**{*;}
-keep class com.ut.secbody.**{*;}
-keep class com.taobao.dp.**{*;}
-keep class com.alibaba.wireless.security.**{*;}

3.6 调用安全组件

项目配置完成之后,就可以写代码调用安全组件了,详细请参考接口文档

4.常见问题(重要)

4.1 安全组件SDK和应用强绑定

安全组件SDK的秘钥图片中会存储加解密时需要的秘钥信息,为了使得该秘钥不被黑客窃取,安全组件SDK会将整个加解密过程放在安全沙箱中运行。同时,秘钥信息还会和应用签名以及应用的其他一些信息进行强绑定。因此,黑客即使拿到用户的加密信息,放在自己的APP中也是无法完成解密操作。

基于安全组件SDK和应用签名等信息强绑定,如果应用的Debug签名和Release签名不同,需要上传两个不同签名的APK包到我们聚安全平台上来生成对应的SDK,发布的时候只需要替换下Release包生成的SDK和秘钥即可。

4.2 运行应用崩溃,提示SO找不到

安全组件SDK为了减小集成应用的APK体积,所以目前只提供了如下两个架构的SO:

· armeabi

· x86

除了集成安全组件SDK之外,如果还集成了其他第三方的SO库,那么此时就需要注意兼容问题了。如果第三方的SO库缺失上述架构中的某一个或者比上述架构的SO要多,那么在该架构的CPU设备上运行会导致应用找不到SO而发生崩溃。解决方法根据接入方式的不同分为Eclipse和Androd Studio两种情况。

Eclipse:

Eclipse解决起来比较简单,在自己工程的libs目录下删除其他架构的文件夹,只保留armeabi和x86两个架构就可以了。

Androd Studio:

Android Studio的工程相对复杂一些,分两种情况。第一种情况是除安全组件SDK之外,其他的第三方SDK都以JAR包和SO库的形式提供,那么解决方案同Eclipse,只需要把其他多余的架构文件夹删除,只保留armeabi和x86两个架构就可以了。

第二种情况是,其他第三方SDK和安全组件SDK一样,是以AAR形式存在的。那么可以在工程的build.gradle配置文件中增加过滤规则即可。被abiFilters指定的架构即会被包含在APK里面。

4.3 把其他架构的SO删掉了,会不会引起不兼容

不会有任何兼容性问题。armeabi架构可以兼容armeabi-v7a和arm64-v8a。同样,x86架构可以兼容x64。如下是“手机淘宝”APP中包含的lib架构,只有armeabi和x86:

4.4 指定shrinkResources之后,密钥图片被优化掉了

指定shrinkResources为true之后,Android Studio会把安全组件的密钥图片给优化掉。

如下,打包出来的APK中,yw_1222_0335.jpg密钥图片的大小为0KB。

解决方法如下:

在工程的res目录下新建raw目录,在raw目录下创建keep.xml文件。在keep.xml中输入如下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@drawable/yw_1222_0335.jpg" />

添加完上述内容,keep住yw_1222_0335.jpg密钥图片即可。

FAQ

关于此文档暂时还没有FAQ
返回
顶部