跳到主要内容

关于启动通信流程

· 阅读需 1 分钟
Quany
软件工程师

流程图

在启动页(SplashActivity)预处理完成后,在下载参数接口获取当前设备是串口还是用 MDB,再启动对应页面 =》 Activity;

模板工程

· 阅读需 4 分钟
Quany
软件工程师

一个具有良好开发框架的银行模板项目。它基于Newland SDK实现了各种金融交易。

演示

[demo.apk]BankTemplate,而 [platform.apk] 是一个本地模拟平台。通过这两个apk,可以在开发POS上执行模拟交易。

操作:模拟应用 -> (服务已开启)配置 -> 保存 -> 对话框确认。然后,可以在BankTemplate上执行交易。

注意:模拟平台apk只能在开发POS上执行。

Gradle和环境

Android StudioGradle插件版本Gradle版本Android SDK
2023.2.18.0.28.033

如果打开项目时出现错误,请升级Gradle到最新版本。(Android Studio->帮助->检查更新

为了方便项目开发,BankTemplate的gradle 进行了一些修改,与原生版本存在以下差异:

  • SDK版本
  • 库依赖
  • 生成的APK名称
  • 签名配置
  • 命名空间(以前是AndroidManifest.xml中的package

具体内容,请参见 **[Gradle配置]

UI

BankTemplate开发了基本的主题、元素颜色和尺寸。

它自定义了常见视图和组件,并使用了多个Lottie动画,适应不同屏幕。

具体内容,请参见 [UI]

逻辑流程

当你在启动器上点击BankTemplate时,应用程序将根据以下流程处理:

[App] 被调用。App将初始化应用程序的基本参数。这个步骤在一个单独的线程上执行,不会影响UI进程。这些参数是应用程序需要初始化的前半部分参数。

//初始化应用程序中的数据
public class App extends BaseApplication {
@Override
public void onCreate() {
...
BaseApplication.SINGLE_EXECUTOR.execute(() -> {
SelfCheckHelper.initAppConfig(this);
});
}
}

然后,[MainActivity] 将被启动。它将在与App相同的单线程上初始化剩余参数。这样可以使参数的初始化按顺序执行。BankTemplate的所有屏幕都在Fragment中实现。

public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
BaseApplication.SINGLE_EXECUTOR.execute(() -> {
SelfCheckHelper.initDevice(this);
...
mSupportDelegate.switchContent(MainFragment.newInstance());
});
...
}
}

所以[MainFragment]将由MainActivity打开以显示主菜单。MainFragment有一个ViewPager来显示[MenuFragment]。MenuFragment包含主菜单。如果一个屏幕无法显示所有菜单项,你可以滑动屏幕到下一个屏幕或进入一个[SubMenuFragment]。

public class MainFragment extends BaseFragment {
...
private void initView() {
...
List<MenuFragment> childFragments = createMenuFragments(items.subList(1, items.size()));
binding.viewPager.setAdapter(new FragmentStateAdapter(this) {
@NonNull
@Override
public Fragment createFragment(int position) {
return childFragments.get(position);
}

@Override
public int getItemCount() {
return childFragments.size();
}
});
...
}
...
@Override
public void onResume() {
super.onResume();
if (MainMenu.getInstance().isChanged()) {
initView();
}
}
}

当点击主菜单项时,[TransActivity]将被打开。然后,TransActivity将开始交易。

public class TransActivity extends BaseActivity {
...
private void transact() {
...
AbstractTrans trans;
try {
Class<? extends AbstractTrans> clz = TransUtils.getTrans(pubBean.getTransType());
if (clz == null) {
LoggerUtils.e("Transaction class is null.");
intent.putExtra(TransTag.MESSAGE, getString(R.string.core_transaction_result_no_such_trans));
intent.putExtra(TransTag.RESULT_CODE, ResultCode.FL);
setResult(RESULT_CANCELED, intent);
finish();
return;
}
LoggerUtils.d("Instantiate transaction: " + clz);
trans = clz.newInstance();
} catch (IllegalAccessException | InstantiationException e) {
...
finish();
return;
}
...
trans.init(this, pubBean);
trans.transact((success) -> {
...
finish();
});
}
...
}

交易

每个交易处理由一个交易类控制。交易类将在TransActivity启动时调用,并在交易类完成后TransActivity结束。

具体内容,请参见 [交易] 。

应用设置

[Settings]是一个用于应用设置的交易。当Settings执行时,它将启动[SettingsActivity]。

SettingsActivity需要密码。有两个密码用于不同的设置。

  • 201003 -> 供应商设置。此密码在代码中是固定的。供应商设置用于紧急处理。
  • 000000-> 管理员/商户设置。此密码可以在设置中修改或通过core/src/main/asset/default_params.ini进行修改。此设置用于商户配置。

Newland SDK

BankTemplate将所有与SDK库相关的API封装在[sdk_helper]模块中。

它包括以下SDK:

ISO8583

[ISO8583.md] 介绍了如何打包8583数据。

Android 子工程

· 阅读需 1 分钟
Quany
软件工程师

整体抽象 tpp

[ ] 1. 网络层 [ ] 2. UI [ ] 3. 注入环境变量,百富还是新大陆

Turbo Modules 对于隐私合规的意义

· 阅读需 1 分钟

Turbo Modules

在之前的架构中 JS 使用的所有 Native Modules(例如蓝牙、地理位置、文件存储等)都必须在应用打开之前进行初始化,这意味着即使用户不需要某些模块,但是它仍然必须在启动时进行初始化。 Turbo Modules 基本上是对这些旧的 Native 模块的增强,现在 JS 将能够持有这些模块的引用,所以 JS 代码可以仅在需要时才加载对应模块,这样可以将显着缩短 RN 应用的启动时间。

目标-事项-分析-执行

· 阅读需 3 分钟
Quany
软件工程师

在制定目标时,明确方向是非常重要的。以下是一些关键步骤来帮助你确立目标和方向。

如何确立目标和方向

  1. 明确目标:确保目标是具体、可衡量、可达成、相关性强和时限性的(SMART 原则)。
  2. 分解目标:将大目标拆分为一系列小目标或里程碑。
  3. 设定时间表:为每个小目标设定明确的时间节点。

事项策略

是否做这件事

  1. ROI(投资回报率):评估成本与预期收益的比例。
  2. 调研了解:充分了解项目背景、市场需求和技术可行性。
  3. 风险评估:识别潜在风险并制定应对措施。

安排事项优先级

  1. SWAT 分析

    • S(紧急):需要立即处理的任务。
    • W(重要):对长期目标有直接影响的任务。
    • A(可延后):可以稍后处理的任务。
    • T(可取消):不紧急也不重要的任务,可以考虑取消。
  2. 四象限法则

    • 紧急且重要:立即处理。
    • 重要但不紧急:计划处理。
    • 紧急但不重要:委托他人处理。
    • 既不紧急也不重要:尽量避免。

常用分析方法

  1. SWOT 分析

    • 优势(Strengths):内部资源的优势。
    • 劣势(Weaknesses):内部资源的不足。
    • 机会(Opportunities):外部环境的机会。
    • 威胁(Threats):外部环境的威胁。
  2. PEST 分析

    • 政治(Political):政策法规的影响。
    • 经济(Economic):市场趋势和经济状况。
    • 社会(Social):社会文化因素。
    • 技术(Technological):技术创新和发展。
  3. 5W1H 分析

    • What:做什么?
    • Why:为什么做?
    • Who:谁来做?
    • Where:在哪里做?
    • When:什么时候做?
    • How:怎么做?

通过以上步骤和方法,可以帮助你更有效地确立目标和方向,并合理安排事项的优先级。

如何制定执行方案

  1. 确定执行方案:确定执行方案,包括任务分配、资源分配、时间安排等。
  2. 制定行动计划:将每个小目标细化为具体的行动步骤。
  3. 监控进度:定期检查进度,确保按计划执行。
  4. 调整计划:根据实际情况调整计划,确保目标能够按时完成。

实施步骤示例

示例 1: 新产品发布

  1. 目标:在接下来的三个月内推出新产品。
  2. 分解目标
    • 设计产品原型
    • 开发产品功能
    • 进行市场测试
    • 正式发布产品
  3. 设定时间表
    • 设计产品原型:第 1 周至第 2 周
    • 开发产品功能:第 3 周至第 6 周
    • 进行市场测试:第 7 周至第 8 周
    • 正式发布产品:第 9 周

示例 2: 提升团队协作效率

  1. 目标:在未来一个月内提升团队协作效率。
  2. 分解目标
    • 优化沟通流程
    • 引入项目管理工具
    • 增加团队培训
  3. 设定时间表
    • 优化沟通流程:第 1 周
    • 引入项目管理工具:第 2 周
    • 增加团队培训:第 3 周

通过以上详细步骤和示例,你可以更好地理解和实施目标管理方法。