写出一个自己的Android移动应用和小程序

2022-07-27  本文已影响0人  BlueSocks

我们知道,App 的开发更偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而 SDK 面向的是开发者,开发更偏向于功能方面,注重功能的开发实现。

我们来试试编写一个SDK吧!

一、SDK是什么?

SDK 全称 Software Development Kit,广义上的 SDK 是为特定的软件包、软件框架、硬件平台、操作系统等建立应用程序时所使用的开发工具的集合(在 iOS 项目中,SDK 也被称为库)。

在 iOS 开发或 Android 开发中,不可避免会需要使用第三方工具提升产品的开发效率,比如用于消息推送的极光,用于第三方支付与登录的支付宝,微信等等。但大多数商用产品都不会直接给出源码(可能只有为爱发电的开源项目才会无私提供源码),而我们在开发 App 时就需要将这些第三方 SDK 集成在我们的项目之中。

SDK 的全称是 Software Development Kit,翻译过来是软件开发工具包,这是一种被用来辅助开发某类软件而编写的特定软件包。

二、SDK 设计的基本原则有哪些?

一款好用且设计充分的 SDK 必须要遵循以下 4 条基本原则,即:

  1. SDK 安全,稳定
  2. 统一的开发规范
  3. Library 小而精
  4. 不依赖第三方 SDK

三、在 Android 环境中如何开发 SDK

1. Android SDK 介绍

Android App 集成第三方 SDK 的文件类型,主要有三种,一种是 JAR 包文件,和 SO 文件 ,另外一种是 AAR 文件, JAR 包是 Java 提供的 SDK 文件类型,里面包含的是纯 Java 编译过后的代码。SO 一般是 C 和 C++ 打包成库的文件。

AAR 名字来源于 Android Archive,见名知义,是一个 Android 库项目的二进制归档文件,使用 Android Studio ,非常简单可以生成一个 AAR 文件。AAR 库文件里面,包含了 JAR 和 SO,还有资源 Res 等文件,结构等同一个 App。

它可以提供构建应用所需的一切内容,包括源代码、资源文件和 Android 清单。不过,Android 库将编译为您可以用作 Android 应用模块依赖项的 Android ARchive (AAR) 文件,而不是编译为在设备上运行的 APK。

与 JAR 文件不同,AAR 文件会为 Android 应用提供以下功能:

2. 创建 SDK 工程

打开上个章节我们创建的示例工程,在工程上创建一个 library module,命名为GPush,让我们模拟实现一个推送简短新闻的接口。

选择 Android Library,并在名称中输入 GPush

添加成功后我们会在左侧看到对应的 Libray 文件

3. 添加依赖项

如需在同一项目中的另一个应用或库模块中使用新的 Android 库代码,就需要这样添加一个项目级依赖项:

  1. 依次转到 File > Project Structure > Dependencies;
  2. 选择要在其中使用库的模块;
  3. Declared Dependencies 标签页中,点击 +,然后在下拉菜单中选择 Module Dependency

先点击加号,再选中对应的 Module Dependency

将其加入依赖中

4. 接口设计

既然是做一个推送新闻的接口,那就必须要分为客户端和推送端,即 Client#onReceiveMessage 和 GPush#pushMessage。

从下面给出 UML 图可以看出,只需要一个方法就可以监听到新闻推送了,GPushImpl#start(Client client)。

可以看我画的 UML 图,帮助你更进一步理解

GPush 类

package com.myname.library;
interface GPush {
    void pushMessage(String msg);
}

GPushImpl 类

package com.myname.library;

import android.os.Handler;
import android.os.HandlerThread;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class GPushImpl implements GPush {

    private List<Client> mClients;
    private HandlerThread mHandlerThread;
    private Handler mHandler;
    private Random mRandom = new Random();
    private List<String> msgs = new ArrayList<String>() {
        {
            add("1、文旅部:严查以中老年为目标的包价游产品");
            add("2、加快推进沿长江户籍改革,服务长江经济带高质量发展。");
            add("3、今年首批10家非法社会组织网站被关停,含中国文艺名人协会等。");
            add("4、上海:5月1日起,电动自行车骑乘人员必须戴头盔。");
            add("5、广州:清明祭扫实行实名预约,倡导网上祭扫、错峰延后祭扫。");
            add("6、河北武安铁矿致6死事故涉嫌瞒报,企业相关人员被控制。");
            add("7、黄峥辞任拼多多董事长:将放弃超级表决权,投入科学研究。");
            add("8、打破国外20年垄断,国产人工心脏研发成功,但商用落地时间暂不确定。");
            add("9、调查:六成青年入睡时间晚于23点,梦多睡眠浅成年轻人睡眠主要问题。");
        }
    };

    GPushImpl() {
        mClients = new ArrayList<>();
        mHandlerThread = new HandlerThread("Push-Thread");
        mHandlerThread.start();
        mHandler = new Handler(mHandlerThread.getLooper());
    }

    @Override
    public void pushMessage(String msg) {
        Iterator<Client> iterator = mClients.iterator();
        while (iterator.hasNext()) {
            iterator.next().onReceiveMessage(msg);
        }
    }

    public static void start(Client client) {
        GPushImpl gPush = new GPushImpl();
        gPush.mClients.add(client);
        gPush.mHandler.post(gPush.mRunnable);
    }

    private Runnable mRunnable = new Runnable() {

        @Override
        public void run() {
            mHandler.postDelayed(mRunnable, mRandom.nextInt(10000));
            pushMessage(msgs.get(mRandom.nextInt(msgs.size())));
        }
    };
}

Client 类

public interface Client {
    void onReceiveMessage(String msg);
}

开始监听新闻推送

GPushImpl.start {
            Toast.makeText(MainActivity@this,it,Toast.LENGTH_LONG).show()
        }

SDK 打包

 ./gradlew :GPush:assembleRelease 

打包完成后就行生成一个 aar 文件, 这个文件就是我们打包的结果了

5. 最后注意事项 — 混淆

基于代码保护的目的,Gradle 打包默认会根据 build.gradle 和 proguard-rules.pro 配置的混淆规则,来对代码进行一个混淆, 如果 library 里面使用了如 GSON 或者反射等技术则需要对部分类进行 keep 操作。

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
-keep class com.myname.library.** {*;}

如果正确按照教程,那相信你已经成功的做出了属于自己的第一个 Android SDK,本期教程依然基于 mac 电脑进行实现,如果你的电脑是 Windows 或者其他操作系统,还需要进行一些其他的灵活配置。

作者:火爆的茶壶
链接:https://segmentfault.com/a/1190000042196633

上一篇下一篇

猜你喜欢

热点阅读