全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
CDN

Android SDK开发指南

更新时间:2017-09-27 10:31:51

1.前言

本文旨在介绍MAC Android SDK的接入步骤和使用方法

2.安装

2.1 配置maven仓库

build.gradle添加阿里云maven仓库

  1. allprojects {
  2. repositories {
  3. maven {
  4. url "http://maven.aliyun.com/nexus/content/repositories/releases"
  5. }
  6. }
  7. }

2.2 配置gradle依赖

  1. dependencies {
  2. compile 'com.aliyun.ams:alicloud-android-mac:1.0.0'
  3. }

目前MAC android sdk只支持arm架构,建议用真机进行测试

2.3 Manifest配置

2.3.1 添加组件

  1. <service
  2. android:name="anetwork.channel.aidl.NetworkService"
  3. android:exported="false">
  4. <intent-filter>
  5. <action android:name="anetwork.channel.aidl.IRemoteNetworkGetter" />
  6. </intent-filter>
  7. </service>

2.3.2 添加权限

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

2.4 Proguard配置

  1. -keep class com.aliyun.ams.** {*;}
  2. -keep public class org.android.spdy.** {*;}
  3. -dontwarn com.alibaba.**
  4. -dontwarn com.taobao.**
  5. -dontwarn anetwork.channel.**
  6. -dontwarn org.android.**

3.支持的版本

mac sdk支持的android最小版本为10

  1. minSdkVersion 10

4.API

  • MacClient

MacClient主要用来发起请求Request和得到响应Response,使用方法请参考最佳实践

  1. public final class MacClient {
  2. // 用于MAC sdk的初始化
  3. public static void init(MacConfig config);
  4. // 根据输入的Request获得一个Call对象
  5. public Call newCall(Request request);
  6. // MacClient的Builder
  7. public static final class Builder {
  8. public MacClient build();
  9. }
  10. }
  • MacConfig

MAC sdk在初始化时需要传入全局配置MacConfig,使用方法请参考最佳实践-初始化:

  1. public final class MacConfig {
  2. // MacConfig的Builder
  3. public static final class Builder {
  4. // 设置Context
  5. public Builder context(Context context);
  6. // 设置appKey
  7. public Builder appKey(String appKey);
  8. // 设置appSecret
  9. public Builder appSecret(String appSecret);
  10. // 创建MacConfig对象
  11. public MacConfig build();
  12. }
  13. }
  • Request

Request表示一个HTTP请求,每一个Request包含一个URL、method、请求header和body,使用方法请参考最佳实践-构建请求对象

  1. public final class Request {
  2. // 返回URL
  3. public String url();
  4. // 返回method,默认为Get
  5. public String method();
  6. // 返回请求头部
  7. public Map<String, String> headers();
  8. // 返回请求body
  9. public byte[] body();
  10. // Request的Builder
  11. public static final class Builder {
  12. // 设置URL
  13. public Builder url(String url);
  14. // 设置method
  15. public Builder method(String method, byte[] body);
  16. // 设置header
  17. public Builder headers(Map<String, String> headers);
  18. // 添加header
  19. public Builder addHeader(String name, String value);
  20. // 移除header
  21. public Builder removeHeader(String name);
  22. // 构建Request对象
  23. public Request build();
  24. }
  25. }
  • Response

Response表示一个Request的响应,每一个Response包含状态码、响应头部以及响应body:

  1. public final class Response {
  2. // 返回状态码
  3. public int code();
  4. // 返回响应头部
  5. public Map<String, String> headers();
  6. // 返回响应body
  7. public byte[] body();
  8. // 返回请求是否成功
  9. public boolean isSuccessful();
  10. }
  • Callback

MAC sdk允许用户使用异步Callback的方式,正常时返回Response,异常时返回MacException,使用方法请参考最佳实践-异步请求过程

  1. public interface Callback {
  2. // 正常时返回Response
  3. void onResponse(Call call, Response response);
  4. // 异常时返回MacException
  5. void onFailure(Call call, MacException exception);
  6. }

5.最佳实践

5.1 初始化

第一步:调用MacConfig.init方法,设置AppKeyAppSecretContext,建议在Application.onCreate时调用:

  1. public class DemoApplication extends Application {
  2. @Override
  3. protected void attachBaseContext(Context base) {
  4. super.attachBaseContext(base);
  5. }
  6. @Override
  7. public void onCreate() {
  8. super.onCreate();
  9. // 初始化MacConfig
  10. MacConfig config = new MacConfig.Builder()
  11. .context(this)
  12. .appKey(APP_KEY)
  13. .appSecret(APP_SECRET)
  14. .build();
  15. MacClient.init(config);
  16. }
  17. }

其中,AppKeyAppSecret可在 App列表页 获取。

第二步:构造MacClient对象,通过该对象来进行网络操作:

  1. // 构造MacClient对象
  2. MacClient client = new MacClient.Builder().build();

5.2 构建请求对象

请求对象Request可以设置urlheadermethod等,其中method默认为Get方法:

  1. Request req = new Request.Builder()
  2. .url(url)
  3. .headers(headers)
  4. .addHeader("User-Agent", "Your UA")
  5. .method("POST", body)
  6. .build();

5.3 同步请求过程

下面为移动加速的同步请求示例,使用时请确保同步请求方法在后台线程中执行:

  1. new Thread(new Runnable() {
  2. @Override
  3. public void run() {
  4. Response rsp = null;
  5. try {
  6. rsp = client.newCall(req).execute();
  7. } catch (MacException e) {
  8. e.printStackTrace();
  9. }
  10. if (rsp != null) {
  11. int statusCode = rsp.code();
  12. byte[] data = rsp.body();
  13. Log.d(TAG, "[DemoActivity] execute statusCode: " + statusCode + " data: " + new String(data));
  14. }
  15. }
  16. }).start();

5.4 异步请求过程

下面为移动加速的异步请求示例,使用时请确保异步请求方法在后台线程中执行:

  1. new Thread(new Runnable() {
  2. @Override
  3. public void run() {
  4. client.newCall(req).enqueue(new Callback() {
  5. @Override
  6. public void onResponse(Call call, Response response) {
  7. int statusCode = response.code();
  8. byte[] data = response.body();
  9. Log.d(TAG, "[DemoActivity] onResponse statusCode: " + statusCode + " data: " + new String(data));
  10. }
  11. @Override
  12. public void onFailure(Call call, MacException e) {
  13. Log.d(TAG, e.getMessage(), e);
  14. }
  15. });
  16. }
  17. }).start();

如何判断加速是否成功

  • 过滤和查看tag为mac的日志,例如控制台通过adb logcat -s mac来过滤

  • 请求成功后可以看到类似日志:

  1. [DHandler] url: https://xxx/xxx.html AccSuccess: 1 reqSuccess: 1

其中,AccSuccess为1表示加速成功,reqSuccess为1表示请求成功

本文导读目录