三种Module
-
application module
: 普通的app
,产物是.apk
,可以直接运行; -
android library module
:一种sdk
,产物是.aar
,不能独立运行,可以包含资源文件; -
java library module
:一种SDK
,产物是.jar
,不能独立运行,不能包含资源文件;
android studio中application module,library module,java module的区别
创建Project
有一种需求是提供SDK
,那么选择android library module
比较好,也就是对外提供.aar
。
首先就要创建一个工程

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

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

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

app
是默认的模块,是一个产物为.apk
的application module
。就算是我们的目标是开发一个作为SDK
的.aar
给其他人用,这个默认的app
也是有用的。.aar
不能独立使用,需要这个app
作为使用者,进行功能调试和验证。
什么也不用做,默认生成的工程是可以运行的。

新建一个模块
-
名字就叫
SDK
,这个最后是要对外输出的.aar
-
默认的
app
模块就当是调用SDK的测试应用.apk
-
功能很简单,就是拉起支付宝。
-
菜单位置
File -> New -> New Module...
-
类型选择
Android Library

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

建立依赖
app
模块是使用者,测试者,依赖SDK
模块。
菜单的位置在File -> Project Structure...
, 图标的位置:

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

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

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

使用intent
的方式拉起支付宝,可以参考下面的文章:
安卓通过Intent一键打开支付宝扫一扫
Android使用Intent打开支付宝或微信
测试界面开发
在app
模块中放一个按钮,点击之后就调用SDK
模块中的拉起支付宝方法,进行测试。

界面布局,(加限制),可以参考下面的文章
Android Studio中ConstraintLayout的使用
Android ConstraintLayout详解
按钮响应
响应函数就直接调用SDK
模块中的open
方法。

调试
-
使用模拟器调试,点击“拉起支付宝”按钮之后,应用崩溃,自动退出,因为模拟器上没有安装支付宝应用。
-
使用真机,并且有支付应用,点击“拉起支付宝”按钮之后,可以正确跳转到支付宝首页。
崩溃解决方法
如果支付宝应用没有安装,直接拉起,会崩溃,用上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版本

-
打包,菜单为
Build -> Make Moudle 'SDK'
-
打包后的文件:

使用例子
得到.aar文件之后,该如何使用呢?
- 新建一个工程
project
,模拟用户使用,比如叫ModuleSample

- 切换到
Project
标签模式,(一般情况下常用Android
标签模式),导入aar
包。一般,都统一放在libs
文件夹下,直接copy
过来就可以。

- 在
build.gradle
配置文件中添加代表本地仓库的配置项
repositories {
flatDir {
dirs 'libs'
}
}

- 在配置文件中添加依赖
implementation (name:'SDK-release', ext:'aar')

添加完成后,记得需要同步一下gradle文件才能生效
- 切换回
Android
标签(编码用这个标签这个比Project
标签方便),在需要的地方使用。这里是按钮的响应方法中:

网友评论