美文网首页
Android模块(SDK)开发实践 - 2020-06-08

Android模块(SDK)开发实践 - 2020-06-08

作者: 勇往直前888 | 来源:发表于2020-06-09 12:03 被阅读0次

三种Module

  1. application module: 普通的app,产物是.apk,可以直接运行;
  2. android library module:一种sdk,产物是.aar,不能独立运行,可以包含资源文件;
  3. java library module:一种SDK,产物是.jar,不能独立运行,不能包含资源文件;

android studio中application module,library module,java module的区别

创建Project

有一种需求是提供SDK,那么选择android library module比较好,也就是对外提供.aar
首先就要创建一个工程

企业微信截图_5811989c-8fbb-4a3d-944b-ca6bf56877d4.png

选择模板,一般默认的就行:

企业微信截图_ea26f0bf-7f4b-434d-b0ed-dbd4104f3853.png

基本信息配置,一般默认的就行:

企业微信截图_6e655d0e-c89b-43ff-95e7-ab1fc8f64f85.png

工程目录,大致的情况如下:

image.png

app是默认的模块,是一个产物为.apkapplication module。就算是我们的目标是开发一个作为SDK.aar给其他人用,这个默认的app也是有用的。.aar不能独立使用,需要这个app作为使用者,进行功能调试和验证。

AndroidStudio创建项目

什么也不用做,默认生成的工程是可以运行的。

企业微信截图_be346ac9-610d-4c4e-8622-98a9d4f991fa.png

新建一个模块

  • 名字就叫SDK,这个最后是要对外输出的.aar

  • 默认的app模块就当是调用SDK的测试应用.apk

  • 功能很简单,就是拉起支付宝。

  1. 菜单位置File -> New -> New Module...

  2. 类型选择Android Library

企业微信截图_c8956652-2278-4eb8-9efe-167512395aa4.png

下一步之后,除了名字改为SDK,其他保持默认就好,创建后,会多出一个和app平级的文件夹

企业微信截图_43a1f135-950f-48a0-bcd7-b88b04baebe5.png

建立依赖

app模块是使用者,测试者,依赖SDK模块。

菜单的位置在File -> Project Structure..., 图标的位置:

企业微信截图_d6daa5c8-b8c1-4822-a71a-99d77cd41cac.png

在弹出的菜单中选择3 Module Dependency

企业微信截图_8079f911-24ad-4aca-bb85-4bc43084663e.png

添加后,就可以从gradle的配置文件看出来:

企业微信截图_6fcc7bf7-f789-487a-87d7-f3264345dfbe.png

功能开发

在SDK模块中新建一个类,写一个公共方法,实现拉起支付宝功能

企业微信截图_04536d3f-d1c6-4a4a-b547-de658fb97a90.png

使用intent的方式拉起支付宝,可以参考下面的文章:
安卓通过Intent一键打开支付宝扫一扫
Android使用Intent打开支付宝或微信

测试界面开发

app模块中放一个按钮,点击之后就调用SDK模块中的拉起支付宝方法,进行测试。

企业微信截图_2ac00b92-1f95-4661-899e-be9e7b1e165c.png

界面布局,(加限制),可以参考下面的文章

Android Studio中ConstraintLayout的使用
Android ConstraintLayout详解

按钮响应

响应函数就直接调用SDK模块中的open方法。

企业微信截图_1b668fcd-4ed6-48e8-819e-aac89ee20df0.png

调试

  • 使用模拟器调试,点击“拉起支付宝”按钮之后,应用崩溃,自动退出,因为模拟器上没有安装支付宝应用。

  • 使用真机,并且有支付应用,点击“拉起支付宝”按钮之后,可以正确跳转到支付宝首页。

崩溃解决方法

如果支付宝应用没有安装,直接拉起,会崩溃,用上try... catch也没用,所以在拉起之前,首先要判断支付宝应用是否安装。

public class AliPayManager {
    private static final String PACKAGE_NAME_ALIPAY = "com.eg.android.AlipayGphone";

    // 支付宝首页
    private static final String url = "alipayqr://platformapi/startapp?";
    // 支付宝扫一扫页面
    //private static final String url = "alipayqr://platformapi/startapp?saId=10000007";

    public static void open(Context context) {
        // 检查支付宝是否安装;
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(PACKAGE_NAME_ALIPAY, 0);
            if(null == info) {
                Toast.makeText(context, "没有安装支付宝", Toast.LENGTH_LONG);
                return;
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return;
        }

        // 如果手机没有支付宝,下面的代码会导致APP崩溃,try... catch也没用
        // 拉起支付宝
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
    }
}

打包

  • 修改为release版本
企业微信截图_dc2815a5-a2d0-4617-9f12-a219ba6c3734.png
  • 打包,菜单为Build -> Make Moudle 'SDK'

  • 打包后的文件:

企业微信截图_b590767a-9d73-4e10-983d-30aef0e259ee.png

使用例子

得到.aar文件之后,该如何使用呢?

  • 新建一个工程project,模拟用户使用,比如叫ModuleSample
企业微信截图_91878701-7121-4aca-a6e2-2c9166f6290c.png
  • 切换到Project标签模式,(一般情况下常用Android标签模式),导入aar包。一般,都统一放在libs文件夹下,直接copy过来就可以。
企业微信截图_6505ddb2-ec77-4ffb-abb4-be82ef853d60.png
  • build.gradle配置文件中添加代表本地仓库的配置项
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
企业微信截图_dea5e71b-2a7e-4c3f-a000-06f721d7556d.png
  • 在配置文件中添加依赖
implementation (name:'SDK-release', ext:'aar')
企业微信截图_b131dba3-fa3e-4ae9-bfc3-f1501dcad8b6.png

添加完成后,记得需要同步一下gradle文件才能生效

  • 切换回Android标签(编码用这个标签这个比Project标签方便),在需要的地方使用。这里是按钮的响应方法中:
企业微信截图_a2a1bc58-59e5-4529-b419-621bcd950268.png

AndroidStudio依赖aar

Demo地址

SdkDemo地址

参考文章

Android组件化/模块化开发(一)
Android组件化/模块化开发(二)

Android多module开发

相关文章

网友评论

      本文标题:Android模块(SDK)开发实践 - 2020-06-08

      本文链接:https://www.haomeiwen.com/subject/urquahtx.html