Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into 3.0_doc
Browse files Browse the repository at this point in the history
  • Loading branch information
zealotchen0 committed Apr 3, 2024
2 parents a2b4898 + eb64e60 commit 6ec33fd
Show file tree
Hide file tree
Showing 187 changed files with 3,552 additions and 2,158 deletions.
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,6 @@ CMakeLists.txt @ilikethese @etkmao
/.markdownlintrc.json @zealotchen0
/PUBLISH.md @zealotchen0
/README.md @zealotchen0

# test
/tests/ios/ @wwwcg @ruifanyuan
9 changes: 2 additions & 7 deletions devtools/devtools-backend/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,6 @@ GlobalPackages_Add(footstone)
target_link_libraries(${PROJECT_NAME} PRIVATE footstone)
# endregion

# region base64
InfraPackage_Add(base64
REMOTE "global_packages/base64/v0.5.0/git-repo.tgz"
LOCAL "third_party/base64")
target_link_libraries(${PROJECT_NAME} PRIVATE base64)
# endregion

# region asio
InfraPackage_Add(asio
REMOTE "devtools/backend/third_party/asio/1.22.1/asio.tar.gz"
Expand All @@ -82,6 +75,8 @@ add_compile_definitions(
# no exception
"_WEBSOCKETPP_NO_EXCEPTIONS_")
target_include_directories(${PROJECT_NAME} PRIVATE ${websocketpp_SOURCE_DIR})
# websocketpp/base64/base64.hpp has some implicit conversion warnings currently
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-error)
# endregion

# region nlohmann_json
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#include <chrono>
#include <string>
#include <functional>

namespace hippy::devtools {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#pragma once

#include <string>
#include <functional>

namespace hippy::devtools {
/**
Expand Down
1 change: 1 addition & 0 deletions devtools/devtools-backend/include/tunnel/net_channel.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

#pragma once
#include <string>
#include <functional>
#include "api/devtools_config.h"
#include "api/devtools_define.h"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#pragma clang diagnostic ignored "-Wunknown-warning-option"
#pragma clang diagnostic ignored "-Wextra"
#define ASIO_STANDALONE
#include "asio.hpp"
#include "websocketpp/client.hpp"
#include "websocketpp/config/asio_no_tls_client.hpp"
#pragma clang diagnostic pop
Expand Down
6 changes: 2 additions & 4 deletions devtools/devtools-backend/src/module/domain/network_domain.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "footstone/logging.h"
#include "module/domain_register.h"
#include "nlohmann/json.hpp"
#include "libbase64.h"
#include "websocketpp/base64/base64.hpp"

namespace hippy::devtools {
constexpr char kResponseBody[] = "body";
Expand Down Expand Up @@ -53,9 +53,7 @@ void NetworkDomain::GetResponseBody(const NetworkResponseBodyRequest& request) {
auto body_data = response.GetBodyData();
response_json[kResponseBase64Encoded] = is_encode_base64;
if (is_encode_base64) {
size_t out_len = 4 * ((body_data.length() + 2) / 3);
std::string encode_body(out_len, '\0');
base64_encode(body_data.c_str(), body_data.length(), encode_body.data(), &out_len, 0);
std::string encode_body = websocketpp::base64_encode(body_data);
response_json[kResponseBody] = encode_body;
} else {
response_json[kResponseBody] = body_data;
Expand Down
2 changes: 1 addition & 1 deletion docs/api/hippy-react/components.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ import icon from './qb_icon_new.png';
| getHeaderStyle | 设置 `PullHeader` 容器的样式。当设置了 `horizontal=true` 启用横向 `ListView` 时,需显式设置 `PullHeader` 宽度。`最低支持版本2.14.1` | `() => styleObject` | `Android、iOS、Voltron` |
| getFooterStyle | 设置 `PullFooter` 容器的样式。当设置了 `horizontal=true` 启用横向 `ListView` 时,需显式设置 `PullFooter` 宽度。`最低支持版本2.14.1` | `() => styleObject` | `Android、iOS、Voltron` |
| getRowType | 指定一个函数,在其中返回对应条目的类型(返回Number类型的自然数,默认是0),List 将对同类型条目进行复用,所以合理的类型拆分,可以很好地提升 List 性能。`注意:同一 type 的 item 组件由于复用可能不会走完整组件创建生命周期` | `(index: number) => number` | `Android、iOS、hippy-react-web、Web-Renderer、Voltron` |
| horizontal | 指定 `ListView` 是否采用横向布局。`default: undefined` 纵向布局,Android `2.14.1` 版本后可设置 `false` 显式固定纵向布局;iOS 暂不支持横向 `ListView`| `boolean \| undefined` | `Android、hippy-react-web、Voltron` |
| horizontal | 指定 `ListView` 是否采用横向布局。`default: undefined` 纵向布局,Android `2.14.1` 版本后可设置 `false` 显式固定纵向布局;iOS `3.0` 开始支持横向 `ListView`| `boolean \| undefined` | `Android、iOS、hippy-react-web、Voltron` |
| initialListSize | 指定在组件刚挂载的时候渲染多少行数据。用这个属性来确保首屏显示合适数量的数据,而不是花费太多帧时间逐步显示出来。 | `number` | `Android、iOS、Web-Renderer、Voltron` |
| initialContentOffset | 初始位移值。在列表初始化时即可指定滚动距离,避免初始化后再通过 scrollTo 系列方法产生的闪动。Android 在 `2.8.0` 版本后支持 | `number` | `Android、iOS、Web-Renderer、Voltron` |
| onAppear | 当有`ListViewItem`滑动进入屏幕时(曝光)触发,入参返回曝光的`ListViewItem`对应索引值。 | `(index) => void` | `Android、iOS、hippy-react-web、Web-Renderer、Voltron` |
Expand Down
9 changes: 9 additions & 0 deletions docs/api/hippy-vue/style.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@ HippyVue 提供了 `beforeLoadStyle` 的 Vue options 勾子函数,供开发者
});
```

beforeLoadStyle 默认是对全局节点生效的,针对不需要执行 beforeLoadStyle 的节点,可以对节点设置属性 beforeLoadStyleDisabled。
对于所有节点(如 div、p、button等均可使用)

```js
<div
:beforeLoadStyleDisabled = "true">
</div>
```

# CSS 选择器

目前已经实现了基本的 `Universal``Type``ID``Class``Grouping` 选择器,而且可以支持除兄弟组合器以外的基本组合关系。
Expand Down
13 changes: 13 additions & 0 deletions docs/api/hippy-vue/vue3.md
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,19 @@ webpack-plugin.ts 封装了 SSR 渲染所需 Hippy App 的初始化逻辑
因 SSR 的渲染方式和生命周期等与客户端渲染方式有一些差异,因此需要在代码编写过程中注意,这里可以参考[Vue官方的SSR指引](https://cn.vuejs.org/guide/scaling-up/ssr.html#writing-ssr-friendly-code)
- Vue 构建结果体积问题
因为 @hippy/vue-next 项目使用的是已编译的 Vue 组件,所以并不依赖于 Vue 的编译器,而默认的 webpack 打包会使用完整版本的 Vue 进行构建,会将不需要的编译器也打包在构建产物中,因此需要指定使用运行时版本的 Vue 产物
```javascript
// scripts/hippy-webpack.android.js
const aliases = {
// ...other options
// hippy 仅需要运行时的 Vue,在这里指定
vue$: 'vue/dist/vue.runtime.esm-bundler.js',
};
```
# 示例
更多使用请参考 [示例项目](https://github.com/Tencent/Hippy/tree/main/examples/hippy-vue-next-demo).
20 changes: 20 additions & 0 deletions docs/development/3.0-upgrade-guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,3 +179,23 @@ Hippy-Vue-Next 在升级3.0可以完全兼容之前的版本,除了升级如
```

为了减低3.0升级的成本原来使用HippyArray类型的接口还是保留,只是标记为@Deprecated,所以升级3.0对于原来定义的dispatchFunction接口不需要做任何修改,但建议后续升级到3.0版本的同学,定义新UI组件的时候,直接Override使用List参数类型的新接口。

# iOS 3.0 SDK 升级指引

## 升级须知

从设计上,`Hippy3.0`尽可能保持了与`Hippy2.0`的兼容性。大部分`Hippy2.0`的自定义组件和自定义模块均可无需任何修改,兼容`Hippy3.0`。

同时在SDK接入API方面,`Hippy3.0`也尽可能保持了一致。因此,如果您未曾在业务中深度扩展`Hippy内置组件`或模块,升级SDK的过程将非常简单,一般情况下仅会遇到少许编译问题,甚至无需修改任何代码。

然而由于3.0的架构改进和一致性优化等原因,部分内在实现会不可避免的发生变化。如果您在业务中存在较多深度定制的自定义组件,如对ListView组件、Image组件进行了深度扩展,那将可能会遇到一些编译问题,本文将做详细说明。

改动较大的组件/模块的说明如下:

1. 删除了`HippyVirtualNode`、`HippyVirtualList`、`HippyVirtualCell`等相关类和API:`HippyVirtualNode`在2.0中作为列表等组件的虚拟对象和数据源,其作用与`HippyShadowView`存在重复,因此`Hippy3.0`删除了这一冗余虚拟对象。

2. ListView组件:为支持横滑(`horizontal: true`)相关特性,ListView的渲染实现从`UITableView`切换为了`UICollectionView`。相应的,列表中Cell的基类也由`UITableViewCell`变更为了`UICollectionViewCell`。

3. Image组件source属性:由于3.0中关于image source的调用约定发生了变化(从 `NSArray` 类型的 `source` 调整为了 `NSString` 类型的 `src`),因此,如自定义了Image组件,请注意在对应的ViewManager中补充实现 `src` 属性,否则图片可能无法正常显示。

4. Image组件内置图片缓存:删除了2.0中内置的背景图片缓存管理类,即`HippyBackgroundImageCacheManager`,图片缓存逻辑交由业务方自行定制。
33 changes: 20 additions & 13 deletions docs/development/_sidebar.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
<!-- docs/_sidebar.md -->
* [Demo体验](development/demo.md)
* [前端接入](development/web-integration.md)
* [环境搭建](development/native-integration.md)
* [3.0升级指引](development/3.0-upgrade-guidelines.md)
* [自定义组件](development/native-component.md)
* [自定义模块](development/native-module.md)
* [事件](development/native-event.md)
* [终端能力适配](development/native-adapter.md)
* [数据类型映射](development/type-mapping.md)
* [V8 API](development/v8-api.md)
* [调试](development/debug.md)
* [技术支持](development/support.md)
* [隐私政策](development/privacy.md)
- [Demo体验](development/demo.md)
- 前端接入
- [Hippy React&Vue接入指引](development/react-vue-integration-guidelines.md)
- [Hippy React&Vue 3.x升级指引](development/react-vue-3.0-upgrade-guidelines.md)
- [Web同构接入指引](development/web-integration-guidelines.md)
- 终端接入
- [Android 3.x SDK集成指引](development/android-3.0-integration-guidelines.md)
- [Android 3.x SDK升级指引](development/android-3.0-upgrade-guidelines.md)
- [iOS 3.x SDK集成指引](development/ios-3.0-integration-guidelines.md)
- [iOS 3.x SDK升级指引](development/ios-3.0-upgrade-guidelines.md)
- [Voltron/Flutter集成指引](development/voltron-flutter-integration-guidelines.md)
- [自定义组件](development/native-component.md)
- [自定义模块](development/native-module.md)
- [事件](development/native-event.md)
- [终端能力适配](development/native-adapter.md)
- [数据类型映射](development/type-mapping.md)
- [V8 API](development/v8-api.md)
- [调试](development/debug.md)
- [技术支持](development/support.md)
- [隐私政策](development/privacy.md)
54 changes: 54 additions & 0 deletions docs/development/android-3.0-integration-guidelines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Hippy Android 3.x SDK集成指引

这篇教程,讲述了如何将 Hippy 3.x SDK 集成到一个现有的 Android 工程。

> 注:以下文档都是假设您已经具备一定的 Android 开发经验。
---

## 前期准备

- 已经安装了 JDK version>=1.7 并配置了环境变量
- 已经安装 Android Studio 最新版本
- 运行 Demo 工程前需要完成 NDK,CMAKE,gradle 与相关插件的安装

## Demo 体验

若想快速体验,可以直接基于我们的 [Android Demo](https://github.com/Tencent/Hippy/tree/v3.0-dev/framework/examples/android-demo) 来开发

## 快速接入

1. 创建一个 Android 工程

2. Maven 集成

- 查询 [Maven Central Hippy 版本](https://search.maven.org/search?q=com.tencent.hippy),其中 `hippy-release``release` 版本(不携带 `inspector`),`hippy-debug``debug` 版本

- 配置 build.gradle

下面引用Hippy最新版本号可在上述链接中查询

```java
// implementation 'com.tencent.hippy:hippy-debug:3.2.0-beta'
implementation 'com.tencent.hippy:hippy-release:3.2.0-beta'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.viewpager:viewpager:1.0.0'
```

3. 本地集成(可选)

- [hippy-framework](https://github.com/Tencent/Hippy/tree/v3.0-dev/framework/android) 工程运行 Gradle Task `other => assembleRelease` 或者 `other => assembleDebug` 后会在 `framework/android/build/outputs/aar` 目录下生成 `release` 或者 `debug` 模式的`android-sdk.aar`,将 `android-sdk.aar` 拷贝到你项目的 `libs` 目录下。

!> 通过 `assembleRelease` task 生成的 AAR 默认不携带 `inspector` 模块,不能在前端通过 Devtools 对代码进行调试,若需要集成 `inspector`,请执行 `assembleDebug` task

- 配置 build.gradle

```java
api (name:'android-sdk', ext:'aar')
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.viewpager:viewpager:1.0.0'
```

4. 在宿主 APP 工程中增加引擎初始化与 `hippyRootView` 挂载逻辑,具体可以参考 [Demo](https://github.com/Tencent/Hippy/tree/v3.0-dev/framework/examples/android-demo) 工程中 `HippyEngineWrapper` 实现
Loading

0 comments on commit 6ec33fd

Please sign in to comment.