Después de ocho días, la sensación después de la primera experiencia de desarrollo de HarmonyOS 2.0

El 10 de septiembre de 2020, se lanzó oficialmente el sistema Hongmeng 2.0 (HarmonyOS 2.0). Hongmeng 2.0 lanzó la versión Beta para desarrolladores de aplicaciones. El 10 de septiembre de 2020, lanzará la versión para pantalla grande, reloj y automóvil de Hongmeng, y el teléfono móvil se lanzará en diciembre de 2020. Edición Hongmeng. El 10 de septiembre de 2020, la hoja de ruta de código abierto de Hongmeng apuntará a dispositivos terminales de memoria de 128KB-128MB; en octubre de 2021, apuntará a todos los dispositivos de más de 4GB.

antecedentes

Como desarrollador de Android, estoy muy emocionado de ver el lanzamiento del sistema operativo nacional. Estoy emocionado de ver lo que está sucediendo. Primero, abra el sitio web oficial para ver la definición del sistema: HarmonyOS es uno Un sistema operativo distribuido "orientado al futuro" para todos los escenarios (oficina móvil, salud deportiva, comunicaciones sociales, entretenimiento multimedia, etc.). Basado en las capacidades tradicionales del sistema de un solo dispositivo, HarmonyOS propone un concepto distribuido basado en el mismo conjunto de capacidades del sistema y adaptándose a múltiples formas de terminales, que pueden admitir múltiples dispositivos terminales.

Para los desarrolladores de aplicaciones, HarmonyOS utiliza una variedad de tecnologías distribuidas, lo que hace que el desarrollo y la realización de aplicaciones sean independientes de las diferencias en la forma de los diferentes dispositivos terminales, lo que reduce la dificultad y el costo de desarrollo. Esto permite a los desarrolladores concentrarse en la lógica empresarial de nivel superior y desarrollar aplicaciones de manera más conveniente y eficiente. Esta ventaja tiene una gran ventaja en la era del 5G, el Internet de todo.

Instalar DevEco Studio

A continuación, descargue DevEco Studio (IDE / herramienta de desarrollo) para experimentar el desarrollo de software. Aquí puede ver que el IDE actual es solo para el sistema Windows (Windows 10 de 64 bits). La instalación de Gradle puede fallar durante el proceso de instalación, recuerde Para agregar un proxy, cree un archivo gradle.properties en el directorio de usuarios (abra "esta computadora", ingrese % userprofile% en la barra de direcciones de la carpeta e ingrese a la interfaz de datos personales), agregue el archivo y el puerto es el puerto del proxy

systemProp.https.proxyPort=63729
systemProp.http.proxyHost=127.0.0.1
systemProp.https.proxyHost=127.0.0.1
systemProp.http.proxyPort=63729

La instalación de Gradle es exitosa, pero la compilación puede fallar durante el proceso de compilación. El error es el siguiente:

ERROR: Cause: mirrors.huaweicloud.com:443 failed to respond

La solución es apagar todos los agentes primero, y luego encontrará una suavidad sedosa.

Después de instalar DevEco Studio, puede ver que la interfaz es muy similar a Android Studio después de abrir

1. Desarrollo del diseño

Todo parece muy familiar, se puede desarrollar en lenguajes como Java o JS , el diseño se puede crear mediante XML y la unidad de tamaño es vp

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical"
    ohos:padding="32">
    <Text
        ohos:id="$+id:text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:text="My name is Jackie."
        ohos:text_size="25vp"/>
    <Button
        ohos:id="$+id:button"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:text="My name is Jackie."
        ohos:text_size="50"/>
</DirectionalLayout>

También se puede crear directamente a través del código Java, y los eventos de clic son muy cordiales.

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    // 步骤1 声明布局
    DirectionalLayout directionalLayout = new DirectionalLayout(context);
    // 步骤2 设置布局大小
    directionalLayout.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
    directionalLayout.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT);
    // 步骤3 设置布局属性及ID(ID视需要设置即可)
    directionalLayout.setOrientation(Component.VERTICAL);
    directionalLayout.setPadding(32, 32, 32, 32);
 
    Text text = new Text(context);
    text.setText("My name is Text.");
    text.setTextSize(50);
    text.setId(100);
    // 步骤4.1 为组件添加对应布局的布局属性
    DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig(LayoutConfig.MATCH_CONTENT,
        LayoutConfig.MATCH_CONTENT);
    layoutConfig.alignment = LayoutAlignment.HORIZONTAL_CENTER;
    text.setLayoutConfig(layoutConfig);
 
    // 步骤4.2 将Text添加到布局中
    directionalLayout.addComponent(text);
 
    // 类似的添加一个Button
    Button button = new Button(context);
    layoutConfig.setMargins(0, 50, 0, 0);
    button.setLayoutConfig(layoutConfig);
    button.setText("My name is Jackie.");
    button.setTextSize(50);
    button.setId(100);
    ShapeElement background = new ShapeElement();
    background.setRgbColor(new RgbColor(0, 125, 255));
    background.setCornerRadius(25);
    button.setBackground(background);
    button.setPadding(10, 10, 10, 10);
    button.setClickedListener(new Component.ClickedListener() {
        @Override
        // 在组件中增加对点击事件的检测
        public void onClick(Component Component) {
            // 此处添加按钮被点击需要执行的操作
        }
    });
    directionalLayout.addComponent(button);
 
    // 步骤5 将布局作为根布局添加到视图树中
    super.setUIContent(directionalLayout);
}

El diseño de la página de inicio es el siguiente, creado por código Java

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        System.out.println("onStart");
        LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT);
        myLayout.setLayoutConfig(config);
        ShapeElement element = new ShapeElement();
        element.setRgbColor(new RgbColor(255, 255, 255));
        myLayout.setBackground(element);

        Text text = new Text(this);
        text.setLayoutConfig(config);
        text.setText("CT Jackie");
        text.setTextColor(new Color(0xFF000000));
        text.setTextSize(50);
        text.setTextAlignment(TextAlignment.CENTER);
        myLayout.addComponent(text);
        super.setUIContent(myLayout);
    }

El efecto es el siguiente:

 

Ciclo vital

Echemos un vistazo al ciclo de vida de la interfaz principal. La interfaz ILifecycle está implementada. Hay siete estados de ciclo de vida.

public static enum Event {
        UNDEFINED,
        ON_START,
        ON_INACTIVE,
        ON_ACTIVE,
        ON_BACKGROUND,
        ON_FOREGROUND,
        ON_STOP;
        private Event() {
        }
    }

OnStart () y onActive () se llaman cuando se inicia la interfaz

2020-09-13 21:42:10.266 25547-25547[表情] I/System.out: onStart
2020-09-13 21:42:10.284 25547-25547[表情] I/System.out: onActive

Llamado cuando se hace clic en el botón Atrás

2020-09-13 21:42:35.847 25547-25547/com.example.helloworld I/System.out: onInactive
2020-09-13 21:42:35.917 25547-25547/com.example.helloworld I/System.out: onBackground
2020-09-13 21:42:35.920 25547-25547/com.example.helloworld I/System.out: onStop

En cuanto a UNDEFINED y ON_FOREGROUND, todavía no lo sé.

Tarea de Gradle (Tarea)

Incluso la tarea de gradle es muy similar, el comando de empaquetado es ensamblarDebug / Liberar

> Task :entry:preBuild
> Task :entry:compileDebugNativeWithCmake
> Task :entry:collectDebugDependencies
> Task :entry:mergeDebugResources
> Task :entry:mergeDebugProfile
> Task :entry:compileDebugResources
> Task :entry:compileDebugIdl
> Task :entry:compileDebugRFile
> Task :entry:processDebugJavaResource
> Task :entry:compileDebugJavaWithJavac
> Task :entry:mergeDebugJavaResource
> Task :entry:generateDebugClassesJar
> Task :entry:mergeDebugProjectDex
> Task :entry:generateDebugShell
> Task :entry:processDebugShellManifest
> Task :entry:compileDebugShellResources
> Task :entry:linkDebugShellResources
> Task :entry:compileDebugShellJavaWithJavac
> Task :entry:mergeDebugShellDex
> Task :entry:packageDebugShell
> Task :entry:packageDebugSimplifyShell
> Task :entry:validateDebugSigning
> Task :entry:signDebugShell
> Task :entry:packageDebugHap
> Task :entry:signDebugHap
> Task :entry:assembleDebug

4. Archivo de configuración

El archivo de configuración es un archivo llamado config.json que configura cierta información sobre la aplicación

{
  "app": {
    "bundleName": "com.example.helloworld",
    "vendor": "example",
    "version": {
      "code": 1,
      "name": "1.0"
    },
    "apiVersion": {
      "compatible": 3,
      "target": 3
    }
  },
  "deviceConfig": {
    "default": {

    }
  },
  "module": {
    "package": "com.example.helloworld",
    "name": ".HelloWorld",
    "reqCapabilities": [
      "video_support"
    ],
    "deviceType": [
      "wearable"
    ],
    "distro": {
      "deliveryWithInstall": true,
      "moduleName": "entry",
      "moduleType": "entry"
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "landscape",
        "formEnabled": false,
        "name": "com.example.helloworld.MainAbility",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "HelloWorld",
        "type": "page",
        "launchType": "standard"
      }
    ]
  }
}

Si observa detenidamente este archivo, sentirá cada vez más que esta es la versión de traducción json de AndroidManifest.xml.

Hongmeng

Como se parece tanto a Android, me parece que veo cuál es el producto de su compilación, ¿es posible descompilar el archivo dex como Android?

 

Lo que obtienes después de la compilación es un archivo xxx.hap

 

Modifique su sufijo a .zip. Después de la descompresión, puede ver que hay activos familiares, dex, archivos apk, etc. Después de instalar este archivo apk, se descubre que no se puede utilizar.

 

A continuación, primero descompilamos este archivo classes.dex y se produce un error después de la primera descompilación dex

~/Desktop/fanbianyi/dex2jar-2.0 » sh d2j-dex2jar.sh classes3.dex
dex2jar classes3.dex -> ./classes3-dex2jar.jar
com.googlecode.d2j.DexException: not support version.
    at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:151)
    at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:211)
    at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:104)
    at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:288)
    at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:32)

La razón es que la versión de nuestra herramienta es demasiado baja. Aquí está la solución. Una vez que la versión actualizada se haya descompilado correctamente, será classes3-dex2jar.jar. Ábralo y podrá ver

 

Hay un archivo ResourceTable adicional, que es nuestra tabla de identificación de recursos. El archivo dex aquí contiene el código que desarrollamos.

A continuación, descompilemos el archivo apk. Después de la descompresión, puede ver que contiene contenido familiar.

 

El archivo AndroidManifest.xml es el siguiente

 

Descompile el archivo dex, puede ver que MainAbilityShellActivity finalmente hereda AbilityShellActivity

 

ShellHelloWorld es en realidad una aplicación

 

En este punto, siento que el archivo .hap es como un paquete para la apk, y la lógica final parece ser el conjunto de Android, o los desarrolladores de Android comenzarán muy rápidamente, y también puede ser una preparación para la compatibilidad futura con el sistema Android.

Migración distribuida entre dispositivos

Migrar entre dispositivos

Echemos un vistazo a algunos de los aspectos más destacados del sistema, como la migración entre dispositivos , que parece una característica interesante, como migrar directamente la pantalla de su teléfono a una computadora o teclado y realizar algunas operaciones, etc.

La migración entre dispositivos (en lo sucesivo, "migración") admite la migración de Page entre diferentes dispositivos del mismo usuario para satisfacer la demanda del usuario de una conmutación sin interrupciones. Tomando como ejemplo la migración de páginas del dispositivo A al dispositivo B, los pasos principales de la migración son los siguientes:

  1. La página del dispositivo A solicita la migración.
  2. HarmonyOS procesa la tarea de migración y vuelve a llamar al método de guardado de datos de Page en el dispositivo A para guardar los datos necesarios para la migración.
  3. HarmonyOS inicia la misma página en el dispositivo B y vuelve a llamar a su método de recuperación de datos.

Los desarrolladores pueden consultar los siguientes pasos detallados para desarrollar Page con función de migración.

Programación distribuida de tareas

En HarmonyOS, la plataforma de programación de tareas distribuida proporciona capacidades de administración de componentes unificadas para el "terminal súper virtual" construido por múltiples dispositivos equipados con HarmonyOS , define una línea de base de capacidad unificada, forma de interfaz, estructura de datos y lenguaje de descripción de servicios para aplicaciones y protege las diferencias de hardware ; Admite tareas distribuidas como inicio remoto, invocación remota y migración empresarial sin problemas.

La plataforma de programación de tareas distribuida se da cuenta de la habilidad en la parte inferior

  • Inicio y cierre: brinde a los desarrolladores la capacidad de administrar capacidades remotas, es decir, la capacidad de iniciar plantillas de página y la capacidad de iniciar y cerrar plantillas de servicio y datos.
  • Conexión y desconexión: brinde a los desarrolladores la capacidad de controlar los servicios en todos los dispositivos (capacidad de servicio y plantillas de datos). Los desarrolladores pueden obtener o anular el registro de objetos de los servicios de administración de dispositivos cruzados al conectarse y desconectarse con servicios remotos para lograr y Programación de servicios coherente a nivel local.
  • Capacidades de migración: brinde a los desarrolladores capacidades de migración sin problemas entre dispositivos.Los desarrolladores pueden migrar sin problemas las empresas locales a los dispositivos designados llamando a la interfaz de migración de la plantilla de página. Capacidad para romper las barreras entre dispositivos.

para resumir

Personalmente, creo que el desarrollo de Hongmeng está muy cerca de los hábitos de los desarrolladores de Android. Es muy fácil de usar para los desarrolladores de Android, pero la compatibilidad existente con la colaboración de múltiples dispositivos de Android es muy deficiente. Hongmeng ha realizado algunas encapsulaciones y extensiones para proteger las diferencias subyacentes. En la era de los dispositivos múltiples y la interconexión de todas las cosas, tiene grandes ventajas. Cuantos más dispositivos cooperen, más ventajosa tiene Hongmeng.


 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_39477770/article/details/108665611
Recomendado
Clasificación