# 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
- 自定义activity
- 创建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>
- 在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
- 前端如果需要监听原生返回按钮的点击事件
@Override
public void onBackPressed() {
Hatom.onBackPressed(R.id.fl_container, getSupportFragmentManager());
}
- 其他使用方式
如果需要返回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版本和所使用的插件。
目录结构
注意事项 在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 |