Проект grouter
Описание проекта:
APP-страница и сервисный компонентный фреймворк.
dependencies {
classpath 'com.gitee.archermind-ti:grouter-gradle-plugin:1.0.1-beta'
}
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 в корневом каталоге настройте свойства:
Добавьте в каждый модуль build.gradle:
// Обратите внимание на порядок, необходимо разместить после других 'apply plugin: XXX'
apply plugin: 'grouter'
В каждом модуле 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:
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());
}
}
Поддерживаются три способа перехода, если это в текущем проекте, рекомендуется использовать третий способ перехода:
// Способ 1
GRouter.getInstance().startActivity(context, "grouterdemo://activity/user?uid=1")
// Способ 2
GRouter.getInstance().activityBuilder("user").put("uid",1).start(context)
// Рекомендуемый способ 3
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) ->bulid 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);
}
}
Поддерживается три способа вызова:
// Способ 1: через URL для создания
Response response = GRouter.getInstance().taskBuilder("grouter://task/getUser?uid=1").execute()
// Способ 2: через конструктор для создания
Response response = GROuter.getInstance().taskBuilder("getUser").put("uid",1).execute()
// Рекомендуемый способ 3: через автоматический конструктор
Response response = GTaskCenter.GetUserTask().uid(1).execute()
Способ 1, параметры RouterField поддерживают типы: int, long, float, double, boolean, Integer, Long, Double, Float, Boolean, String, int[], long[], float[], double[], boolean[], String[], сериализуемые List, сериализуемый Object.
Если это способ 2 и способ 3, поддерживаются параметры любого типа.
@RouterComponent
Добавьте @RouterComponent аннотацию, затем нажмите DevEco Studio, редактор, верхнее меню Build -> bulid Hap(s)/App(s) ->bulid Hap(s), чтобы сгенерировать конструктор метода в GComponentCenter:
public interface UserService {
public void sayHello();
public User getUser(int uid);
public List<User> listUser();
}
Реализуйте интерфейс в модуле: Есть два способа вызова:
// Не рекомендуется
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");
}
}
В других независимых модулях или BaseModule можно напрямую использовать сгенерированный класс-посредник для вызова.
AccountService accountServiceDelegate = GDelegateCenter.AccountService(context) User user = accountServiceDelegate.login("","")
Шаг 1. Входной проект компиляции Сначала закомментируйте все apply plugin: 'grouter' в build.gradle проекта.
Шаг 2. Пример компиляции проекта shell_webview Откройте редактор DevEco Studio->Edit Configurations->Run/Debug configurations, выберите Allow parallel run и Deloy Multi Hap Packages, а затем скомпилируйте и установите.
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.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )