<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 苏杰豪</title>
    <description>The latest articles on DEV Community by 苏杰豪 (@megasu).</description>
    <link>https://dev.to/megasu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3299973%2F6c87a2b0-9cfc-43fb-af68-ad8762870924.jpg</url>
      <title>DEV Community: 苏杰豪</title>
      <link>https://dev.to/megasu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/megasu"/>
    <language>en</language>
    <item>
      <title>uni-app x Cross-Platform Getting Started and Practice: Develop HarmonyOS 5 Applications</title>
      <dc:creator>苏杰豪</dc:creator>
      <pubDate>Fri, 27 Jun 2025 10:29:47 +0000</pubDate>
      <link>https://dev.to/megasu/uni-app-x-cross-platform-getting-started-and-practice-develop-harmonyos-5-applications-2poj</link>
      <guid>https://dev.to/megasu/uni-app-x-cross-platform-getting-started-and-practice-develop-harmonyos-5-applications-2poj</guid>
      <description>&lt;h1&gt;
  
  
  uni-app x Cross-Platform Getting Started and Practice: Develop HarmonyOS 5 Applications
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Course Introduction
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What You Will Gain
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Core logic of uni-app x for developing native HarmonyOS applications&lt;/li&gt;
&lt;li&gt;Multi-platform interface adaptation thinking and code compatibility practice&lt;/li&gt;
&lt;li&gt;Complete a publishable cross-platform application from 0 to 1&lt;/li&gt;
&lt;li&gt;Acquire multi-platform application development capabilities (HarmonyOS Next/Android/iOS/WeChat Mini Program/Web)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Target Audience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HarmonyOS application development engineers who want to enter the cross-platform field&lt;/li&gt;
&lt;li&gt;Technology enthusiasts who want to learn HarmonyOS and mini program development but lack practical cases&lt;/li&gt;
&lt;li&gt;Partners who have learned uni-app and want to advance to the next-generation uni-app x technology stack&lt;/li&gt;
&lt;li&gt;Mobile development engineers who want one codebase to cover multiple platforms&lt;/li&gt;
&lt;li&gt;Enterprise developers or startup teams who need to quickly develop multi-platform applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Course Overview
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83510c308xq42g50vfqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83510c308xq42g50vfqy.png" alt="Application Icon" width="192" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This course uses "Random Jokes" as a practical case to comprehensively analyze the cross-platform development process based on uni-app x. Through full-chain practice from environment setup, feature development to multi-platform adaptation, students will master the core syntax of uni-app x, cross-platform component invocation, screen adaptation techniques, and multi-platform (HarmonyOS Next/Android/iOS/WeChat Mini Program/Web) packaging and deployment capabilities. The course combines real development scenarios such as Huawei foldable screen adaptation and cloud packaging, focusing on practical implementation and cutting-edge technology coverage, helping developers quickly get started with cross-platform application development and accumulate project experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Course Highlights
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Practice-driven, learn and apply immediately:&lt;/strong&gt; Using complete open-source projects as carriers, covering the full process from requirement analysis to online deployment, avoiding pure theoretical stacking, focusing on code implementation and problem solving (such as foldable screen adaptation, multi-platform style compatibility).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-platform adaptation core technology breakdown:&lt;/strong&gt; In-depth analysis of uni-app x cross-platform principles, mastering differentiated adaptation strategies for different devices and platforms through hands-on practice like Huawei foldable screen adaptation, HarmonyOS platform signing configuration, and compatibility handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cutting-edge technology and ecosystem coverage:&lt;/strong&gt; Combining HarmonyOS (HarmonyOS Next) development, Uni TypeScript syntax, SCSS style preprocessing and other technologies, adapting to current cross-platform development trends.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Platform Compatibility
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HarmonyOS NEXT / HarmonyOS 5 ✅&lt;/li&gt;
&lt;li&gt;Android ✅&lt;/li&gt;
&lt;li&gt;iOS ✅&lt;/li&gt;
&lt;li&gt;WeChat Mini Program ✅&lt;/li&gt;
&lt;li&gt;Web (Browser) ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Running Effects
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;iPhone, Android, HarmonyOS Mate X (Unfolded), WeChat Mini Program&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6un9ulnkt3lrmxmp5o6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6un9ulnkt3lrmxmp5o6j.png" alt="Running Effect 1" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iPhone, Android, HarmonyOS Mate X (Folded), WeChat Mini Program&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7xf6lzmoyqxk07gke6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7xf6lzmoyqxk07gke6v.png" alt="Running Effect 2" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;UniApp X&lt;/li&gt;
&lt;li&gt;Uni TypeScript&lt;/li&gt;
&lt;li&gt;Vue 3&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Operating System: MacOS 15.4.1&lt;/li&gt;
&lt;li&gt;Editor: HBuilder X 4.65&lt;/li&gt;
&lt;li&gt;HarmonyOS Development Environment: DevEco Studio 5.0.4 Release&lt;/li&gt;
&lt;li&gt;Android Development Environment: Android Studio (version 2024.2)&lt;/li&gt;
&lt;li&gt;iOS Development Environment: Xcode Version 16.1 (16B40)&lt;/li&gt;
&lt;li&gt;Browser: Chrome 135.0.7049.85&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  uni-app x
&lt;/h2&gt;

&lt;h3&gt;
  
  
  uni-app x Introduction
&lt;/h3&gt;

&lt;p&gt;uni-app x is the next-generation uni-app, a cross-platform application development engine that now supports compilation into HarmonyOS Next native applications (4.61+)&lt;/p&gt;

&lt;p&gt;uni-app x includes the uvue rendering engine, uts language, uni components and APIs, and extension mechanisms.&lt;/p&gt;

&lt;h3&gt;
  
  
  uvue Rendering Engine
&lt;/h3&gt;

&lt;p&gt;Quickly write pages using the vue3 framework, ultimately compiling into high-performance pure native interfaces for different platforms.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Template-based writing&lt;/li&gt;
&lt;li&gt;Data two-way binding&lt;/li&gt;
&lt;li&gt;Component mechanism&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the HarmonyOS Next platform, uni-app x projects are compiled entirely into ArkTS + ArkUI code, essentially native HarmonyOS applications written with vue syntax.&lt;/p&gt;

&lt;h3&gt;
  
  
  uts Language
&lt;/h3&gt;

&lt;p&gt;uts stands for uni typescript, a strongly-typed modern programming language. It supports cross-platform and will ultimately be compiled into native languages for different platforms, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;web/mini program&lt;/code&gt; platforms, compiled to JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HarmonyOS next&lt;/code&gt; platform, compiled to ArkTS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Android&lt;/code&gt; platform, compiled to Kotlin&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;iOS&lt;/code&gt; platform, compiled to Swift&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;uts is very similar to ts, but for cross-platform compatibility, uts has some constraints and platform-specific additions. See &lt;a href="https://doc.dcloud.net.cn/uni-app-x/uts/index.html" rel="noopener noreferrer"&gt;uts Language Introduction&lt;/a&gt; for details&lt;/p&gt;

&lt;p&gt;Note: In ts, object types are often defined through interface or type, but in uts, you need to use type to define object types. Because interface has differences in kotlin and swift.&lt;/p&gt;

&lt;h3&gt;
  
  
  uni Components
&lt;/h3&gt;

&lt;p&gt;uni-app x components are mainly divided into three categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Built-in basic components&lt;/code&gt;: such as view, text, image, scroll-view, input... etc., see &lt;a href="https://doc.dcloud.net.cn/uni-app-x/component/index.html" rel="noopener noreferrer"&gt;Component List&lt;/a&gt; for details&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Custom components&lt;/code&gt;: Components encapsulated by developers using vue syntax.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;uts component plugins&lt;/code&gt;: Third-party components that can be downloaded through the &lt;a href="https://ext.dcloud.net.cn/" rel="noopener noreferrer"&gt;Plugin Market&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Preparation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Development Environment Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Download and install HBuilderX editor&lt;/li&gt;
&lt;li&gt;Create uni-app x project through HbuilderX&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project Directory Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;├─pages             Directory &lt;span class="k"&gt;for &lt;/span&gt;storing business page files
│  └─index
│     └─index.uvue  index page
├─static            Directory &lt;span class="k"&gt;for &lt;/span&gt;storing &lt;span class="nb"&gt;local &lt;/span&gt;static resources referenced by the application &lt;span class="o"&gt;(&lt;/span&gt;Note: static resources can only be stored here&lt;span class="o"&gt;)&lt;/span&gt;
├─unpackage         Non-project code, generally stores compilation results &lt;span class="k"&gt;for &lt;/span&gt;running or publishing
├─index.html        H5 page
├─main.uts          Vue initialization entry file
├─App.uvue          Application configuration, used to configure App global styles and listeners
├─pages.json        Configure page routing, navigation bar, tab bar and other page information
├─manifest.json     Configure application name, appid, logo, version and other packaging information
└─uni.scss          Built-in common style variables &lt;span class="k"&gt;for &lt;/span&gt;uni-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compile and Run
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install uni-app x compiler plugin&lt;/li&gt;
&lt;li&gt;Compile and run HarmonyOS native application&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Project Practice
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Effect Preview
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflizo7qr1a0nemegczwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflizo7qr1a0nemegczwm.png" alt="Image description" width="606" height="1312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lcwbjbe6y5m24izr40a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lcwbjbe6y5m24izr40a.png" alt="Image description" width="608" height="1312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Material Download
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.yuque.com/attachments/yuque/0/2025/zip/2735051/1747623334802-848b63f4-0fd7-4578-ad63-0125237a305d.zip" rel="noopener noreferrer"&gt;Project Image Materials.zip&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Structure and Styling
&lt;/h3&gt;

&lt;p&gt;Use uni-app x component library to implement basic project layout.&lt;/p&gt;

&lt;p&gt;Layout Key Points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;view component defaults to flex mode with vertical column direction&lt;/li&gt;
&lt;li&gt;uni-app x styles are not inherited, text needs to be wrapped with text and styled separately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reference Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Card container --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- Header title --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Random Jokes&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- Scroll content area --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;scroll-view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scroll-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scroll-content-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Loading jokes...&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/scroll-view&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- Footer button --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer-button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Next One&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;style&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"scss"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/* Note 1: view defaults to flex with column direction */&lt;/span&gt;
  &lt;span class="cm"&gt;/* display: flex; */&lt;/span&gt;
  &lt;span class="cm"&gt;/* flex-direction: column;  */&lt;/span&gt;
  &lt;span class="cm"&gt;/* Note 2: uni-app x styles are not inherited, text needs to be wrapped with text and styled separately */&lt;/span&gt;
  &lt;span class="cm"&gt;/* font-size: 100rpx; */&lt;/span&gt;
  &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f6f6f6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;90%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="cm"&gt;/* 1. Box shadow: X offset, Y offset, blur radius and color */&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10rpx&lt;/span&gt; &lt;span class="m"&gt;30rpx&lt;/span&gt; &lt;span class="mh"&gt;#a7b3f9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="cm"&gt;/* iOS has compatibility issues, needs to be set to white actively */&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1534f5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;110rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;30rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="cm"&gt;/* iOS border-radius is not constrained by parent, needs to be set actively */&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20rpx&lt;/span&gt; &lt;span class="m"&gt;20rpx&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="cm"&gt;/* 2. Center vertically on main axis */&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="cm"&gt;/* 3. After adding lang="scss" to style, supports class nesting */&lt;/span&gt;
  &lt;span class="cm"&gt;/* 4. Text cannot inherit, need to define class names for text modifications */&lt;/span&gt;
  &lt;span class="nc"&gt;.header-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;28rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.scroll-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40rpx&lt;/span&gt; &lt;span class="m"&gt;30rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="cm"&gt;/* 5. Minimum height */&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nc"&gt;.scroll-content-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#3204ac&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;45rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/* 6. Align horizontally to the right */&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex-end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nc"&gt;.footer-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#1534f5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6rpx&lt;/span&gt; &lt;span class="m"&gt;30rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;style&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Business Logic
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Joke API: &lt;a href="https://hmajax.itheima.net/api/randjoke" rel="noopener noreferrer"&gt;https://hmajax.itheima.net/api/randjoke&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Network Request API: &lt;a href="https://doc.dcloud.net.cn/uni-app-x/api/request.html" rel="noopener noreferrer"&gt;https://doc.dcloud.net.cn/uni-app-x/api/request.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Request networking tutorial: &lt;a href="https://doc.dcloud.net.cn/uni-app-x/tutorial/request.html" rel="noopener noreferrer"&gt;https://doc.dcloud.net.cn/uni-app-x/tutorial/request.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reference Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"uts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jokeText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Loading jokes...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Note: uni-app x needs to use type to define object types, using interface has compatibility issues&lt;/span&gt;
&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ServiceData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getJoke&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Specify the backend return data type through generics&lt;/span&gt;
  &lt;span class="nx"&gt;uni&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ServiceData&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://hmajax.itheima.net/api/randjoke&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Android-compatible type writing&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jokeStr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jokeStr&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;jokeText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jokeStr&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;jokeText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Data retrieval failed, please check network...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Random Jokes&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;scroll-view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scroll-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scroll-content-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;jokeText&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/scroll-view&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer-button"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"getJoke()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Next One&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lifecycle
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Page Lifecycle
&lt;/h2&gt;

&lt;p&gt;Page Lifecycle: &lt;a href="https://doc.dcloud.net.cn/uni-app-x/page.html#lifecycle" rel="noopener noreferrer"&gt;https://doc.dcloud.net.cn/uni-app-x/page.html#lifecycle&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Composition API&lt;/th&gt;
&lt;th&gt;Options API&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;onLoad&lt;/td&gt;
&lt;td&gt;onLoad&lt;/td&gt;
&lt;td&gt;Lifecycle callback listening for page load. Triggered when page loads. A page is only called once, parameters from the path opening current page can be obtained in onLoad parameters.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onPageShow&lt;/td&gt;
&lt;td&gt;onShow&lt;/td&gt;
&lt;td&gt;Lifecycle callback listening for page show. Triggered when page shows/enters foreground.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onReady&lt;/td&gt;
&lt;td&gt;onReady&lt;/td&gt;
&lt;td&gt;Lifecycle callback listening for page initial render completion. Triggered when page initial render is complete. A page is only called once, representing that the page is ready and can interact with the view layer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onPageHide&lt;/td&gt;
&lt;td&gt;onHide&lt;/td&gt;
&lt;td&gt;Lifecycle callback listening for page hide. Triggered when page hides/enters background. Such as &lt;code&gt;navigateTo&lt;/code&gt; or bottom &lt;code&gt;tab&lt;/code&gt; switching to other pages, application entering background, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onUnload&lt;/td&gt;
&lt;td&gt;onUnload&lt;/td&gt;
&lt;td&gt;Lifecycle callback listening for page unload. Triggered when page unloads. Such as &lt;code&gt;redirectTo&lt;/code&gt; or &lt;code&gt;navigateBack&lt;/code&gt; to other pages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onResize&lt;/td&gt;
&lt;td&gt;onResize&lt;/td&gt;
&lt;td&gt;Triggered when page size changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onBackPress&lt;/td&gt;
&lt;td&gt;onBackPress&lt;/td&gt;
&lt;td&gt;Listen for page return&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Reference Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"uts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// ...previous code omitted&lt;/span&gt;

&lt;span class="c1"&gt;// When page loads&lt;/span&gt;
&lt;span class="nf"&gt;onLoad&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Get joke&lt;/span&gt;
  &lt;span class="nf"&gt;getJoke&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Foldable Screen Adaptation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Get window information: &lt;a href="https://doc.dcloud.net.cn/uni-app-x/api/get-window-info.html" rel="noopener noreferrer"&gt;https://doc.dcloud.net.cn/uni-app-x/api/get-window-info.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vh&lt;/code&gt; unit can only be used on WeChat Mini Program and Web platforms, HarmonyOS, Android, iOS platforms do not support it&lt;/li&gt;
&lt;li&gt;Properties like &lt;code&gt;max-height&lt;/code&gt;, &lt;code&gt;min-height&lt;/code&gt; can only use numbers or px units for multi-platform compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Effect Preview:&lt;/p&gt;

&lt;p&gt;Reference Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"uts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// ...other code omitted&lt;/span&gt;

&lt;span class="c1"&gt;// Synchronously get window information, returned unit is px&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;windowInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;uni&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getWindowInfo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Random Jokes&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- Scroll content area --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;scroll-view&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scroll-content"&lt;/span&gt;
        &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;{ maxHeight: windowInfo.screenHeight * 0.66 + 'px' }"
      &amp;gt;
        &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scroll-content-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;jokeText&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/scroll-view&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer-button"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"getJoke()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Next One&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;style&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"scss"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nc"&gt;.scroll-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40rpx&lt;/span&gt; &lt;span class="m"&gt;30rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// 5. Minimum height&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300rpx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// vh unit can only be used on WeChat Mini Program and Web platforms, max-height, min-height only support numbers or px units&lt;/span&gt;
  &lt;span class="cm"&gt;/* #ifdef MP-WEIXIN || WEB */&lt;/span&gt;
  &lt;span class="nl"&gt;max-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;66vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Maximum height, 66% of screen height */&lt;/span&gt;
  &lt;span class="cm"&gt;/* #endif */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;style&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  HarmonyOS Application Signing Certificate
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HarmonyOS debug certificate for real device debugging&lt;/li&gt;
&lt;li&gt;HarmonyOS release certificate for publishing&lt;/li&gt;
&lt;li&gt;AGC platform to create projects and applications&lt;/li&gt;
&lt;li&gt;HBuilderX to configure HarmonyOS debug certificate&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  HarmonyOS Signing Certificate
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DevEco Studio&lt;/th&gt;
&lt;th&gt;Hbuilder&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;storeFile&lt;/td&gt;
&lt;td&gt;Private key store file&lt;/td&gt;
&lt;td&gt;.p12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;storePassword&lt;/td&gt;
&lt;td&gt;Private key store password&lt;/td&gt;
&lt;td&gt;·······&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;keyAlias&lt;/td&gt;
&lt;td&gt;Private key alias&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;debugKey&lt;/strong&gt; / &lt;strong&gt;releaseKey&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;keyPassword&lt;/td&gt;
&lt;td&gt;Private key password&lt;/td&gt;
&lt;td&gt;·······&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;profile&lt;/td&gt;
&lt;td&gt;Signing profile file&lt;/td&gt;
&lt;td&gt;.p7b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;certpath&lt;/td&gt;
&lt;td&gt;Certificate file&lt;/td&gt;
&lt;td&gt;.cer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  AGC Platform Create Project and Application
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;There are many steps here, please patiently check each step until application creation is complete.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Log in to &lt;a href="https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/" rel="noopener noreferrer"&gt;AppGallery Connect&lt;/a&gt;, click "Development &amp;amp; Services".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click "Add Project" on the project page.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtyvkmi4mql7s58yde43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtyvkmi4mql7s58yde43.png" alt="Image description" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter the project name on the "Create Project" page, then click "Finish".&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fre1hz8xzgzxe3k501qib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fre1hz8xzgzxe3k501qib.png" alt="Image description" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select "Certificates, APP ID and Profile", select "APP ID" in the left navigation bar, after entering the page, click "New" in the upper right corner.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb4olh3nfbc0vb8wqn8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb4olh3nfbc0vb8wqn8u.png" alt="Image description" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HarmonyOS Debug Certificate
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;code&gt;manifest.json&lt;/code&gt; file, select the "HarmonyOS App Configuration" menu, then click the "Configure" button for debug certificate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmbp7xplvmzmr8z2og0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmbp7xplvmzmr8z2og0x.png" alt="Image description" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the debug certificate configuration, check that "Application Package Name" and "Running Device" are correct, then click the "Auto Apply for Debug Certificate" button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdbajhbofmzcbqtpk3sx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdbajhbofmzcbqtpk3sx.png" alt="Image description" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HarmonyOS Release Certificate
&lt;/h3&gt;

&lt;p&gt;HarmonyOS release certificates cannot be automatically generated, the process has many steps, please refer to the video explanation, patiently check each step until configuration is complete.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release certificate files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg1n8l3qw5zzcvshtk1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg1n8l3qw5zzcvshtk1m.png" alt="Image description" width="800" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure release certificate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2npdx9oagb3gw0xwm5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2npdx9oagb3gw0xwm5v.png" alt="Image description" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release certificate notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Signing profile file &lt;code&gt;.p7b&lt;/code&gt; cannot be reused because it contains package name information, other certificate files can be reused across multiple projects, please remember the private key alias and password.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DevEco Studio&lt;/th&gt;
&lt;th&gt;Hbuilder&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;storeFile&lt;/td&gt;
&lt;td&gt;Private key store file&lt;/td&gt;
&lt;td&gt;.p12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;storePassword&lt;/td&gt;
&lt;td&gt;Private key store password&lt;/td&gt;
&lt;td&gt;·······&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;keyAlias&lt;/td&gt;
&lt;td&gt;Private key alias&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;debugKey&lt;/strong&gt; / &lt;strong&gt;releaseKey&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;keyPassword&lt;/td&gt;
&lt;td&gt;Private key password&lt;/td&gt;
&lt;td&gt;·······&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;profile&lt;/td&gt;
&lt;td&gt;Signing profile file&lt;/td&gt;
&lt;td&gt;.p7b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;certpath&lt;/td&gt;
&lt;td&gt;Certificate file&lt;/td&gt;
&lt;td&gt;.cer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  HarmonyOS Application Packaging and Distribution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HarmonyOS Application Local Packaging
&lt;/h3&gt;

&lt;p&gt;After &lt;strong&gt;configuring HarmonyOS release certificate&lt;/strong&gt;, you can proceed with &lt;strong&gt;HarmonyOS application local packaging&lt;/strong&gt;, ultimately generating a signed &lt;code&gt;.app&lt;/code&gt; installation package.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fouqwhlv94cns4rhsxxrp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fouqwhlv94cns4rhsxxrp.png" alt="Image description" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HarmonyOS Application Publishing
&lt;/h3&gt;

&lt;p&gt;Upload the signed &lt;code&gt;.app&lt;/code&gt; installation package on the AGC platform, please refer to the video explanation or check the official documentation: &lt;a href="https://developer.huawei.com/consumer/cn/doc/app/agc-help-harmonyos-releaseapp-0000001914554900" rel="noopener noreferrer"&gt;Publishing HarmonyOS Applications (HarmonyOS NEXT)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tpspep0ixaazzl0r3s1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tpspep0ixaazzl0r3s1.png" alt="Image description" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Android Application Cloud Packaging (Additional)
&lt;/h3&gt;

&lt;p&gt;Android applications can be directly packaged using cloud certificates, ultimately generating a signed &lt;code&gt;.apk&lt;/code&gt; installation package.&lt;/p&gt;

&lt;p&gt;Users can upload the &lt;code&gt;apk&lt;/code&gt; to various Android app stores.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c28qp8bvzs8nubjw7ao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c28qp8bvzs8nubjw7ao.png" alt="Image description" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
