鸿蒙开源组件——APP页面及服务组件化框架

jacksky
发布于 2021-10-18 18:15
浏览
0收藏

grouter

项目介绍

  • 功能:APP页面及服务组件化框架。鸿蒙开源组件——APP页面及服务组件化框架-鸿蒙开发者社区

安装教程

1.项目根目录下的build.gradle文件中添加依赖。

 dependencies {
        classpath 'com.gitee.archermind-ti:grouter-gradle-plugin:1.0.1-beta'
 }

2.在moudle级别下的build.gradle文件中添加依赖。

dependencies {
    compile 'com.gitee.archermind-ti:grouter:1.0.1-beta'
    compile 'com.gitee.archermind-ti:grouter-annotation:1.0.1-beta'
    annotationProcessor 'com.gitee.archermind-ti:grouter-compiler:1.0.1-beta'
}

使用说明

在根目录下的gradle.properties中配置属性

#####请填写填写代码生成的保存路径(根据自己的路径) GROUTER_SOURCE_PATH =entry/src/main/java #####请填写自己项目独特的scheme GROUTER_SCHEME =grouter

在每一个Module的 build.gradle 增加

// 需要注意顺序,必须放在其它 'apply plugin: XXX' 后面
apply plugin: 'grouter'

在每一个Module的 build.gradle 的ohos->defaultConfig中添加

javaCompileOptions {

            annotationProcessorOptions {
                arguments = [
                        MODULE_NAME : 'shell_base',
                        GROUTER_SOURCE_PATH : GROUTER_SOURCE_PATH,
                        GROUTER_HOST : '',
                        GROUTER_MULTI_PROJECT_NAME :'',
                        GROUTER_SCHEME : GROUTER_SCHEME,
                        ROOT_PROJECT_DIR : project.rootDir
                ]
            }

        }

在 MyApplication 进行初始化

// fastjson

GRouter.setSerialization(new GRouter.Serialization() {

            @Override
            public String serialize(Object object) {
                return JSON.toJSONString(object);
            }

            @Override
            public <T> T deserializeObject(String json, Class<T> clazz) {
                return JSON.parseObject(json, clazz);
            }

            @Override
            public <T> List<T> deserializeList(String json, Class<T> clazz) {
                return JSON.parseArray(json, clazz);
            }
        });

GRouter.getInstance().init(this, BuildConfig.BUILD_TYPE, null)

使用注解

增加RouterActivity注解 然后点击DevEco Studio 编辑器顶部菜单 Build -> bulid Hap(s)/App(s) ->build Hap(s)就会在 GActivityCenter 中生成构造器方法

@RouterActivity("user")
public class UserAbility extends Ability {

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(UserAbilitySlice.class.getName());
    }

}

 

支持三种方式跳转,如果是在当前工程建议使用第三种方式跳转

// 方式一
GRouter.getInstance().startActivity(context, "grouterdemo://activity/user?uid=1")

// 方式二
GRouter.getInstance().activityBuilder("user").put("uid",1).start(context)

// 方式三:推荐
GActivityCenter.UserActivity().user(User(1,"Wiki")).start(context)
RouterField参数支持类型:int、long、float、double、boolean、Integer、Long、Double、Float、Boolean、String、int[]、long[]、float[]、double[]、boolean[]、String[]、可序列化List、可序列化Object

@RouterTask 增加@RouterTask注解,然后点击DevEco Studio 编辑器顶部菜单 Build -> bulid Hap(s)/App(s) ->build Hap(s)就会在 GTaskCenter 中生成构造器方法

@RouterTask(value = "getUser", returns = "User")
public class GetUserTask extends GRouterTask {

    @RouterField
    public int uid;

    @RouterField
    public String name;

    @Override
    public Object process() {

        return new User(uid, name);
    }
}

 

支持三种方式调用

// 方式一:通过url创建
Response response = GRouter.getInstance().taskBuilder("grouter://task/getUser?uid=1").execute()

// 方式二:通过构造器创建
Response response = GRouter.getInstance().taskBuilder("getUser").put("uid",1).execute()

// 方式三:通过自动构造器
Response response = GTaskCenter.GetUserTask().uid(1).execute()

// 支持直接获取返回的对象
val user = response.value(User.class)
// 支持直接获取返回对象的某个字段
val userName = response.map().get("name")
// 支持直接获取返回的json序列化
String text = response.toString()

方式一,RouterField参数支持类型:int、long、float、double、boolean、Integer、Long、Double、Float、Boolean、String、int[]、long[]、float[]、double[]、boolean[]、String[]、可序列化List、可序列化Object。

如果是方式二和方式三,支持任意类型参数。

@RouterComponent 增加@RouterComponent注解,然后点击DevEco Studio 编辑器顶部菜单 Build -> bulid Hap(s)/App(s) ->build Hap(s)就会在 GComponentCenter 中生成构造器方法

public interface UserService {

    public void sayHello();
    public User getUser(int uid);
    public List<User> listUser();
}


在 Module 中编写实现类。

@RouterComponent(value = "userService",protocol = AccountService::class)
class UserServiceImpl : UserService {

        private User user;
        private int uid;
        private Context context;
    
        @RouterComponentConstructor
        public UserServiceImpl() {
    
        }
        @RouterComponentConstructor
        public UserServiceImpl(Context context) {
            super();
            this.context = context;
        }
}


有两种方式调用

// 不推荐
UserService userService = GRouter.getInstance().getComponent("userService") as UserService

// 不推荐
UserService userService = GRouter.getInstance().getComponent("userService",UserService::class.java)

// 推荐
UserService userService = GComponentCenter.UserServiceImpl()

User user = userService.getUser(1)

@RouterDelegate 增加@RouterDelegate注解,然后点击DevEco Studio 编辑器顶部菜单 Build -> bulid Hap(s)/App(s) ->build Hap(s)就在 GDelegateCenter 中生成构造器方法。

@RouterDelegate
class AccountService {

  	AccountService() {}
    @RouterDelegateConstructor
    AccountService(Context context) {}
    @RouterDelegateMethod
    public User login(String uid, String  pwd)  {
            return new User("Wiki");
    }

}

在其它无依赖的Module或者BaseModule都可用直接使用生成的代理类调用

AccountService accountServiceDelegate = GDelegateCenter.AccountService(context) User user = accountServiceDelegate.login("","")

 

版本迭代
v1.0.0-beta
源码编译步骤
一.entry工程编译 第一次编译先注释掉工程中所有build.gradle下的apply plugin: 'grouter'

1.编译grouter-annotation工程,上传到本地或远程仓储

2.编译grouter-compiler工程,上传到本地或远程仓储

3.编译grouter-gradle-plugin工程,上传到本地或远程仓储

4.打开所有注释的apply plugin: 'grouter'

5.编译运行工程

二.example_shell_webview工程编译 打开编辑器DevEco Studio->Edit Configurations->Run/Debug configurations选项卡 选中Allow parallel run选项和Deloy Multi Hap Packages选项再进行编译安装

基线release版本


Releases 1.0.0

commit id d3ec14d322b0329e3a72c3ff4b558a9f1c619d1a

版权和许可信息


Copyright 2019 taoweiji

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

grouter-master.zip 9.12M 10次下载
已于2021-10-19 20:54:28修改
收藏
回复
举报
回复
    相关推荐