全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网

接入前准备

更新时间:2017-06-07 13:26:11

1 下载安全组件

1.1. 点击左侧栏目【总览】,在页面右上角上传APP

1

1.2. 等待上传应用,上传成功后勾选安全组件功能(可以全部勾选)

2

3

1.3. 下载免费版安全组件,按照接入文档接入集成

4

1.4. Android平台提供基础版和企业版,基础版为免费版本,用户可免费下载使用;企业版为收费版本,用户需在线付费购买后方可下载。

iOS平台仅提供收费的企业版,用户需在线付费购买后方可下载。

2 集成前准备

安全组件在阿里巴巴的很多开放的sdk中也有包含,比如百川(TAE),支付宝开放sdk等。安全组件不能存在两份,所以如果你的apk中同时引入了这些sdk,则在集成安全组件的之前需要将这些sdk(TAE,支付宝等)中包含的安全组件删掉。

需要删掉SecurityGuardSDK-${version}.aar和libsecuritysdk-${version}.so或者SecurityGuardSDK-${version}.jar和libsgmain.so,但是需要保留图片文件:yw_1222*.jpg。

然后再使用第3章的方法将刚才从聚安全网站上面下载的SDK和图片集成到项目中。

3 开发流程

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

3.1 导入aar

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

3.2 导入jar包和so

把SDK中的所有的jar包和so文件都复制到工程的libs目录下:导入jar包和so目前提供两种架构下的so文件,armeabi是针对arm架构编译的包,x86是针对x86架构编译的包。应用程序在不同cpu架构的机型里会选择相应的so文件加载。

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

3.3 导入加密文件

第一步中已经得到了加密文件yw_1222_0335.jpg,现在需要把这个加密文件导入到工程中 res\drawable\目录下,如果没有这个文件夹,请先创建。

下方左图为AndroidStudio中安全加密图片位置,右图为Eclipse中安全加密图片位置。导入加密文件

3.4 添加权限信息

如果是AndroidStudio项目,则不需要在项目中额外配置权限,因为在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文件中:

添加ProGuard配置

AndroidStudio:

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

AndroidStudio

为了保证我们需要的一些类不混淆,因此需要在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两个架构就可以了。1

Androd Studio:

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

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

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

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

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

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

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

解决方法如下:

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

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

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

本文导读目录