# Hatom-hybrid

# 简介

本库是基于jsbridge封装的移动端混合开发框架,前端资源压缩包目录结构为:/***/h5Resources/h5packCode.zip, 解压之后的目录结构为:/***/h5Resources/h5packCode/h5packCode/index.html。debug包前端资源文件位于Android/data/包名/files文件夹下,release包前端资源文件位于data/data/packagename/files文件夹下。

# 配置依赖

在项目顶层build.gradle文件配置Hitom生产环境的maven地址,

buildscript {
    repositories {
        mavenCentral()
        google()
        maven {
            url "http://10.215.255.165:80/artifactory/maven-down/"
            credentials {
                username "maven-down"
                password "******"
            }
        }
    }
}

allprojects {
    repositories {
        ......
        maven {
            url "http://10.215.255.165:80/artifactory/maven-down/"
            credentials {
                username "maven-down"
                password "******"
            }
        }
    }
}

在模块级别build.gradle的dependencies配置Hitom组件

implementation 'com.hatom:hatom-corex:1.3.4-SNAPSHOT'
implementation 'com.hatom:hatom-annotation:1.3.4-SNAPSHOT' //有插件的模块需要要引入
annotationProcessor 'com.hatom:hatom-compiler:1.3.4-SNAPSHOT' //有插件的模块需要要引入

# 初始化

在Application的onCreate()方法中初始化

//要先打开日志,否则有些日志会不打印。
Hatom.openLog();
Hatom.init(this);

# 基础用法(单页面)

  • 方式一:使用StandardActivity
String url = "前端url"
HashMap<String, String> params = new HashMap<>();
Intent intent = new Intent(this, StandardActivity.class);
intent.putExtra(EXTRA_URL, url); //传递页面url,可以是本地地址或远程url
intent.putExtra(EXTRA_PARAMS, params); //传递参数,参数最终会在getRootInfo插件中传给前端页面
intent.putExtra(EXTRA_ALLOW_BACK, false); //false:由前端处理物理返回键,true:原生处理物理返回键
intent.putExtra(EXTRA_NEED_LOADING, false); //false:不展示右上角x号和loading动画,true:展示右上角x号和loading动画
startActivity(intent);
  • 方式二:自定义activity
  1. 自定义activity
  2. 创建activity的布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  <FrameLayout
    android:id="@+id/fl_container"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
  1. 在onCreate方法中增加如下代码
this.hatomWeb = Hatom.with(this)
	.webViewClient(this.webViewClient)
	.withParams(map)
	.load(this.mUrl)
	.into(R.id.fl_container, false);//R.id.fl_container是容器的id
  1. 前端如果需要监听原生返回按钮的点击事件
@Override
public void onBackPressed() {
  Hatom.onBackPressed(R.id.fl_container, getSupportFragmentManager());
}
  1. 其他使用方式
    如果需要返回fragment进行加载时,可以使用下面的方式进行fragment的创建
Hatom.with(activity).withParams(params).load(url).getFragment();

# 编写插件

  • 基本用法 添加@Plugin注解、继承基类HatomPlugin.class、在插件类创建需要给前端调用的方法并加上@JsMethod注解
@Plugin(name = "TestPlugin", priority = 1)  //name为插件名, priority为优先级,优先级高的插件可以覆盖优先级低的插件,没有特殊需要可不写
public class TestPlugin extends HatomPlugin { //继承HatomPlugin

  @JsMethod  //加上注解来指定方法可以被前端调用
  public void method(HatomFragment fragment, String json, CallBackFunction function) { //method 为方法名
    function.onCallBack(JSON.toJSONString(new Result(-1,"Illegal Argument Exception"))); // 返回结果给前端
  }
}
  • 跳转页面注意事项
    若自定义的插件中需要跳转到其他页面时建议使用fragment.startActivityForResult方法; 若跳转其他页面后需要返回值时:在当前插件类中重写onActivityResult方法;

  • 申请权限注意事项
    若自定义的插件中需要申请权限,可以使用

PermissionHelper.requestPermission((HatomFragment) fragment, SAVE_TO_ALBUM_SEC, Manifest.permission.READ_EXTERNAL_STORAGE);

也可以使用android原生提供的api进行权限申请,但是需要注意的是权限申请的回调需要在当前插件类中重写onRequestPermissionsResult方法;

# 创建壳工程

  • 介绍 Hitom平台(https://hitom.hikyun.com/) 所有应用都会有一个模板,每个模板对应一个壳工程,壳工程其实就是一个只有app模块的Android工程,在里面可以配置maven仓库,gradle版本、kotlin版本和所使用的插件。

  • 目录结构

    Markdown
  • 注意事项 在Hitom平台创建壳工程需要上传zip文件,将只有app模块的Android工程压缩成zip文件,切记不可将工程放在单独的文件夹进行压缩,否则在打包的时候提示找不到local.properties文件。

3-1.配置local.properties
read sdk.conf finish.
read portal app local.properties.
can not find local.properties.
task_id:65b69029-351b-4375-8bfa-edfd404ed17f, can not find local.properties.,成果物地址:[] ,
$step Finished: Error

Hitom平台在线打包gradle版本、编译版本和kotlin版本对应关系

gradle插件版本 gradle版本 compileSdkVersion kotlin版本
3.6.3 6.1.1 28 1.3.50
3.6.3 6.1.1 31 1.5.30
4.1.1 6.5.1 33 1.6.20
4.1.1 6.7.1 33 1.6.20