aboutsummaryrefslogtreecommitdiff
path: root/zh-cn/devices/tech/ota/nonab/device_code.html
diff options
context:
space:
mode:
Diffstat (limited to 'zh-cn/devices/tech/ota/nonab/device_code.html')
-rw-r--r--zh-cn/devices/tech/ota/nonab/device_code.html21
1 files changed, 10 insertions, 11 deletions
diff --git a/zh-cn/devices/tech/ota/nonab/device_code.html b/zh-cn/devices/tech/ota/nonab/device_code.html
index 4e25c730..b93623f4 100644
--- a/zh-cn/devices/tech/ota/nonab/device_code.html
+++ b/zh-cn/devices/tech/ota/nonab/device_code.html
@@ -73,7 +73,7 @@ device/yoyodyne/tardis/recovery.fstab
<h2 id="recovery-ui">恢复界面</h2>
<p>要支持配备不同可用硬件(物理按钮、LED、屏幕等)的设备,您可以自定义恢复界面以显示状态,并访问每台设备的手动操作隐藏功能。</p>
<p>您的目标是编译一个包含一些 C++ 对象的小型静态库,以提供设备专属功能。默认情况下会使用 <code>
-<b>bootable/recovery/default_device.cpp</b></code> 文件,该文件正好可在为设备编写此文件的版本时供您复制。</p>
+<b>bootable/recovery/default_device.cpp</b></code> 文件,该文件可在为您的设备编写这一文件时供您参考。</p>
<pre class="devsite-click-to-copy">
device/yoyodyne/tardis/recovery/recovery_ui.cpp
@@ -106,7 +106,7 @@ static const char* ITEMS[] = {"reboot system now",
<p class="note"><strong>注意</strong>:长行会被截断(而非换行),因此请留意您设备的屏幕宽度。</p>
<h3 id="customize-checkkey">自定义 CheckKey</h3>
-<p>接下来,请定义您设备的 RecoveryUI 实现。本例假设 <b>tardis</b> 设备配有屏幕,因此,您可以沿用内置 ScreenRecoveryUIimplementation(请参阅有关<a href="#devices-without-screens">无屏幕设备</a>的说明)。可通过 ScreenRecoveryUI 自定义的唯一函数是 <code>CheckKey()</code>,该函数会执行初始异步键处理操作:</p>
+<p>接下来,请定义您设备的 RecoveryUI 实现。本示例假设 <b>tardis</b> 设备配有屏幕,因此,您可以沿用内置 ScreenRecoveryUIimplementation(请参阅有关<a href="#devices-without-screens">无屏幕设备</a>的说明)。可通过 ScreenRecoveryUI 自定义的唯一函数是 <code>CheckKey()</code>,该函数会执行初始异步键处理操作:</p>
<pre class="prettyprint">
class TardisUI : public ScreenRecoveryUI {
@@ -227,11 +227,10 @@ const char* const* GetMenuItems() { return ITEMS; }
<li><b>kNoAction</b>:不使用此按键执行任何操作</li>
</ul>
-<p>由于 <code>HandleMenuKey()</code> 隐含在可见参数中,因此,即使菜单不可见,也会进行调用。与 <code>CheckKey()</code> 不同的是,当恢复系统执行清除数据或安装软件包等操作时,系统不会调用该函数,只有恢复系统处于闲置状态或等待输入时才会调用该函数。<i></i></p>
+<p>由于 <code>HandleMenuKey()</code> 隐含在可见参数中,因此,即使菜单不可见,也会进行调用。与 <code>CheckKey()</code> 不同的是,当恢复系统执行清除数据或安装软件包等操作时,系统不会调用该函数,只有恢复系统处于闲置状态并等待输入时才会调用该函数。<i></i></p>
<h4 id="trackball-mechanism">轨迹球机制</h4>
-<p>如果您的设备采用类似于轨迹球的输入机制(生成类型为 EV_REL、代码为 REL_Y 的输入事件),那么,只要类似于轨迹球的输入设备报告 Y 轴的动作,恢复系统就会合成 KEY_UP 和 KEY_DOWN 按键。您只需将 KEY_UP 和 KEY_DOWN 事件映射到相应的菜单操作即可。
-<i></i>由于无法针对 <code>CheckKey()</code> 实现此映射,因此不能将轨迹球运动作为重新启动或切换显示状态的触发器。</p>
+<p>如果您的设备采用类似于轨迹球的输入机制(生成类型为 EV_REL、代码为 REL_Y 的输入事件),那么,只要类似于轨迹球的输入设备报告 Y 轴的动作,恢复系统就会合成 KEY_UP 和 KEY_DOWN 按键。您只需将 KEY_UP 和 KEY_DOWN 事件映射到相应的菜单操作即可。<i></i>由于无法针对 <code>CheckKey()</code> 实现此映射,因此不能将轨迹球动作作为重新启动或切换显示状态的触发器。</p>
<h4 id="modifier-keys">辅助键</h4>
<p>要查看作为辅助键按下的键,请调用您自己的界面对象的 <code>IsKeyPressed()
@@ -545,7 +544,7 @@ ReadValueVarArgs()</code> 便捷函数来评估数量不定的参数(它会返
}
</pre>
-<p>便捷函数 <code>StringValue()</code> 会将字符串封装到新的 Value 对象中。使用此函数可使上述代码的编写更加简洁:</p>
+<p>便捷函数 <code>StringValue()</code> 会将字符串封装到新的 Value 对象中。使用此函数可以简化上述代码:</p>
<pre class="prettyprint">
FreeValue(key);
@@ -563,7 +562,7 @@ void Register_librecovery_updater_tardis() {
}
</pre>
-<p>现在,您可以配置 makefile,以使用您的代码编译静态库(此 makefile 即是之前的区段中用于自定义恢复界面的 makefile;您设备的两个静态库可能都是在此定义的)。</p>
+<p>现在,您可以配置 makefile,以使用您的代码编译静态库(此 makefile 即是用于自定义之前区段中的恢复界面的 makefile;您设备的两个静态库可能都是在此定义的)。</p>
<pre class="devsite-click-to-copy">
device/yoyodyne/tardis/recovery/Android.mk
@@ -582,7 +581,7 @@ LOCAL_MODULE := librecovery_updater_tardis
include $(BUILD_STATIC_LIBRARY)
</pre>
-<p>最后,配置 recovery 的版本号以拉入您的库。将您的库添加到 TARGET_RECOVERY_UPDATER_LIBS(它可能包含多个库;所有库均已注册)。如果您的代码依赖于本身不是 edify 扩展程序的其他静态库(即,它们没有 <code>Register_<i>libname</i></code> 函数),您可以将其列于 TARGET_RECOVERY_UPDATER_EXTRA_LIBS 中,以将其关联到更新程序,而无需调用其(不存在的)注册函数。例如,如果您的设备专属代码需要使用 zlib 解压缩数据,您可以在此处包含 libz。</p>
+<p>最后,配置 recovery 的编译版本以拉入您的库。将您的库添加到 TARGET_RECOVERY_UPDATER_LIBS(它可能包含多个库;所有库均已注册)。如果您的代码依赖于本身不是 edify 扩展的其他静态库(即,它们没有 <code>Register_<i>libname</i></code> 函数),您可以将这些库列于 TARGET_RECOVERY_UPDATER_EXTRA_LIBS 中,以将其关联到更新程序,而无需调用其(不存在的)注册函数。例如,如果您的设备专属代码需要使用 zlib 解压缩数据,您可以在此处包含 libz。</p>
<pre class="devsite-click-to-copy">
device/yoyodyne/tardis/BoardConfig.mk
@@ -697,9 +696,9 @@ def IncrementalOTA_InstallEnd(info):
<ul>
<li><b>info.input_zip</b>:(仅限完整 OTA)输入 target-files .zip 的 <code>zipfile.ZipFile</code> 对象。</li>
<li><b>info.source_zip</b>:(仅限增量 OTA)源 target-files .zip 的 <code>zipfile.ZipFile
-</code> 对象(安装增量包时版本号已在设备上)。</li>
+</code> 对象(安装增量包时编译版本已在设备上)。</li>
<li><b>info.target_zip</b>:(仅限增量 OTA)目标 target-files .zip 的 <code>zipfile.ZipFile
-</code> 对象(增量包置于设备上的版本号)。</li>
+</code> 对象(增量包置于设备上的编译版本)。</li>
<li><b>info.output_zip</b>:正在创建的更新包;为进行写入而打开的 <code>zipfile.ZipFile
</code> 对象。使用 common.ZipWriteStr(info.output_zip、<i>filename</i>、<i>data</i>)将文件添加到文件包。</li>
<li><b>info.script</b>:可以附加命令的目标脚本对象。调用 <code>info.script.AppendExtra(<i>script_text</i>)</code> 以将文本输出到脚本中。请确保输出文本以分号结尾,这样就不会运行到随后发出 (emit) 的命令中。</li>
@@ -753,7 +752,7 @@ Device::InvokeMenuItem()</code> 方法可以返回以下 BuiltinAction 值:</p
</code> 通常不可用于恢复系统,因为它可能会被加密。恢复界面会显示 <code>/sdcard</code> 中的 .zip 文件菜单,以便用户进行选择。</li>
<li><b>APPLY_CACHE</b>:类似于从 <code>/sdcard</code> 加载更新包,不过使用的是 <code>/cache</code> 目录(始终可用于恢复)。<i></i>在常规系统中,<code>/cache
</code> 只能由特权用户写入;如果设备不可启动,则完全无法写入 <code>/cache</code> 目录(这样一来,该机制的效用就会有所限制)。</li>
-<li><b>APPLY_ADB_SIDELOAD</b>:允许用户通过 USB 数据线和 adb 开发工具将软件包发送到设备。调用此机制时,恢复系统将启动自身的迷你版 adbd 守护进程,以便已连接的主机上的 adb 与其进行对话。该迷你版守护进程仅支持一个命令:<code>adb sideload <i>filename</i></code>。已命名的文件会从主机发送到设备,然后对其进行验证和安装(如同文件在本地存储区中一样)。</li>
+<li><b>APPLY_ADB_SIDELOAD</b>:允许用户通过 USB 数据线和 adb 开发工具将软件包发送到设备。调用此机制时,恢复系统将启动自身的迷你版 adbd 守护进程,以便已连接的主机上的 adb 与其进行对话。该迷你版守护进程仅支持一个命令:<code>adb sideload <i>filename</i></code>。已命名的文件会从主机发送到设备,然后接受验证并进行安装(如同文件在本地存储区中一样)。</li>
</ul>
<p>一些注意事项:</p>