Maison > interface Web > js tutoriel > le corps du texte

Développeur Android avec outils Web : le moyen le plus rapide de produire avec Ionic React

WBOY
Libérer: 2024-08-07 20:53:13
original
797 Les gens l'ont consulté

Investir dans le développement d'Android peut générer une énorme part de marché des appareils, une portée élargie du marché et un retour sur investissement élevé.

Avec plus de 6,8 milliards d'utilisateurs de smartphones dans le monde. Android détient environ 70 % de part de marché mondiale, soit environ 4,76 milliards d'utilisateurs. Trouver votre niche est à votre portée. Il s’agit de produire des applications rapides et de haute qualité.

Ionic, avec ses composants Web natifs, vous permet de créer des applications Android performantes et de haute qualité à l'aide d'outils familiers tels que HTML, JavaScript et CSS, tout en exploitant les fonctionnalités natives de Capacitor.

Ceci est plus qu'un simple tutoriel sur Ionic ; il s'agit de créer des applications Android de qualité et performantes, prêtes pour la production.

Cet article est une introduction à une série dans laquelle nous couvrirons les bases d'Ionic avec React comme interface et explorerons plus tard le pont entre les technologies natives et Web à l'aide de Capacitor.

Cadre ionique : une introduction

Les runtimes ou les ponts entre différentes technologies n'ont rien de nouveau !

Prenons Node.js, par exemple. Ce n'est que via Node que JavaScript peut devenir un langage système.

   [JS]
   [byte code]
   [Node] --> [N API] --> [C/C++ modules]
   [bindings]
   [Cpp][V8][libuv]
   [OS]

Copier après la connexion

Considérez les applications de bureau hybrides utilisant HTML, JavaScript et CSS comme vue via la vue Web. Go Wails, un framework de développement de bureau très performant, est basé sur cette idée. De même, les applications Rust Tauri fonctionnent sur ce principe.

Les liaisons existent et sont testées depuis un moment dans le monde mobile, avec des exemples comme React Native et NativeScript.

Le monde du développement prend conscience de l'importance non seulement de l'interface utilisateur, mais aussi d'une interface utilisateur belle et réactive. Il n'existe pas de framework aussi avancé que les technologies web dans ce domaine.

Le développement natif d'Android s'oriente vers React avec des interfaces utilisateur composables dans Kotlin, s'éloignant du XML moins favorisé.

Cette tendance apporte le meilleur des deux mondes : une vitesse native avec une superbe interface utilisateur composable. C'est là que Ionic se démarque de ses pairs. La différence est que Ionic est facile à comprendre : j'ai réussi à créer l'application d'un client en moins d'un mois.

Installation

Créez un nouveau dossier de projet et exécutez ce qui suit :

npx ionic start

Copier après la connexion

Cela vous guidera à travers la configuration Ionic. Choisissez React comme framework frontend pour cet article.

Ionic utilise toujours Webpack et Create React App (CRA) car Vite ne prend pas encore en charge Stencil.js, le cœur des composants Web Ionic.

Une fois que tout est installé, ouvrez le projet dans VSCode. Je préfère supprimer npm et utiliser pnpm (cette étape est facultative). Si vous voulez faire la même chose :

  • Supprimez le dossier node_modules.

  • Supprimez le fichier package-lock.json, pas package.json.

  • Exécutez l'installation de pnpm.

Pour exécuter une application Ionic, utilisez :

npx ionic serve

Copier après la connexion

La CLI Ionic s’occupera de tout. Vous pouvez également utiliser l'option --lab pour un aperçu semblable à celui d'un téléphone (notez qu'il ne s'agit pas d'un émulateur Android ou iOS, mais d'une "vue") :

pnpm add -D @ionic/lab

npx ionic serve --lab

Copier après la connexion

Android Dev with web Tools: fastest way to production with Ionic React

Cela nous permet de prévisualiser l'apparence de l'interface utilisateur sur une vue semblable à celle d'un téléphone.

Passer en revue la structure

Je suppose que le projet est ouvert dans un IDE de votre choix. Si vous n'avez pas d'expérience React, cela peut être un peu difficile. Je suggère de suivre un didacticiel React de base et de découvrir les routeurs React.

Le point d'entrée est un rendu d'application React standard dans index.tsx :

root.render(      

<React.StrictMode>

     <App/>

</React.StrictMode>

  );



Copier après la connexion

Dans App.tsx, il s'agit d'un routeur et d'une barre de navigation par onglets, utilisant le routeur et les composants Ionic. Les composants ioniques sont des composants Web natifs construits avec Stencil.js, conçus pour ressembler à une application mobile.

Ionic fournit des fichiers et des thèmes CSS adaptés aux normes iOS et Android. Utilisez les composants Ionic sur HTML pour une apparence et une convivialité naturelles d'application mobile.

Décomposons App.tsx, en commençant par le routeur. Il fonctionne de manière similaire au routeur Web React, en faisant correspondre un chemin vers un composant et en restituant le composant correspondant lors de la navigation.



import Tab1 from './pages/Tab1';

import Tab2 from './pages/Tab2';

import Tab3 from './pages/Tab3';



    <IonRouterOutlet>
          <Route exact path="/tab1">
            <Tab1 />
          </Route>
          <Route exact path="/tab2">
            <Tab2 />
          </Route>
          <Route path="/tab3">
            <Tab3 />
          </Route>
          <Route exact path="/">
            <Redirect to="/tab1" />
          </Route>
     </IonRouterOutlet>

Copier après la connexion

Si vous êtes familier avec le backend, le chemin est comme un point de terminaison et le composant est un gestionnaire.

   <IonTabBar slot="bottom">
          <IonTabButton tab="tab1" href="/tab1">
            <IonIcon aria-hidden="true" icon={triangle} />
            <IonLabel>Tab 1</IonLabel>
          </IonTabButton>
          <IonTabButton tab="tab2" href="/tab2">
            <IonIcon aria-hidden="true" icon={ellipse} />
            <IonLabel>Tab 2</IonLabel>
          </IonTabButton>
          <IonTabButton tab="tab3" href="/tab3">
            <IonIcon aria-hidden="true" icon={square} />
            <IonLabel>Tab 3</IonLabel>
          </IonTabButton>
     </IonTabBar>



Copier après la connexion

Le IonTabBar crée une barre d'onglets au niveau de l'emplacement fourni, dans notre application en bas. La magie est dans le bouton d'onglet : déclenche le routeur à l'aide de hrefs. Tout le code React normal, enveloppé dans des composants ioniques.

Suivez l'une des pages à onglet ; ce ne sont essentiellement que des pages.

   <IonPage>
      <IonHeader>
        <IonToolbar>
          <IonTitle>Tab 1</IonTitle>
        </IonToolbar>
      </IonHeader>
      <IonContent fullscreen>
        <IonHeader collapse="condense">
          <IonToolbar>
            <IonTitle size="large">Tab 1</IonTitle>
          </IonToolbar>
        </IonHeader>
        <ExploreContainer name="Tab 1 page" />
      </IonContent>
    </IonPage>



Copier après la connexion

L'utilisation du composant de page Ionic gère des éléments tels que le défilement et la réactivité.

La structure standard d'une page Ionic comprend un en-tête avec une barre d'outils et une zone de contenu, similaire à la plupart des applications mobiles.

En-tête :

  <IonHeader>
        <IonToolbar>
          <IonTitle>Tab 1</IonTitle>
        </IonToolbar>
      </IonHeader>

Copier après la connexion

Zone de contenu :



    <IonContent fullscreen>
        <IonHeader collapse="condense">
          <IonToolbar>
            <IonTitle size="large">Tab 1</IonTitle>
          </IonToolbar>
        </IonHeader>
          <ExploreContainer name="Tab 1 page" />
      </IonContent>



Copier après la connexion

The content area occupies most of the screen, where most of the application lives. The ExploreContainer acts as a slot; we can conditionally render components based on the name prop.

<ExploreContainer name="Tab 1 page" />

Copier après la connexion

When name is "Tab 1," we render a component for that tab. You can hard code components for each tab, but the slot method is more flexible and composable.

For example, open the ExploreContainer component under the components folder and create three new components:

const Tab1Content = () => { return ( "I am tab 1 content" ); }

const Tab2Content = () => { return ( "I am tab 2 content" ); }

const Tab3Content = () => { return ( "I am tab 3 content" ); }

Copier après la connexion

Now update the container to conditionally render based on the name prop:

<div className="container">
  {name.includes("Tab 1") ? <Tab1Content /> : name.includes("Tab 2") ? <Tab2Content /> : <Tab3Content />}
</div>


Copier après la connexion

This is just an example; you can create an easy-to-follow pattern matching method. The updated preview should show "I am tab x content" based on the tab clicked.

This application is still web-based. We haven't installed or initialized Capacitor, which is responsible for turning our application into a native app.

Android Dev with web Tools: fastest way to production with Ionic React

Capacitor is a cross-platform native runtime for web apps, allowing us to create cross-platform iOS, Android, and Progressive Web Apps with JavaScript, HTML, and CSS.

Enabling Capacitor in Ionic

First, install Capacitor:

pnpm add @capacitor/core
pnpm add -D @capacitor/cli

Copier après la connexion

Next, initialize the Capacitor configuration file:

npx cap init

Copier après la connexion

The package ID should uniquely identify your app. We use an inverted domain name, e.g., com.example.app.

Capacitor is initialized. Run the following commands to install a Capacitor platform and primitive plugins:

pnpm add @capacitor/android



pnpm add @capacitor/app @capacitor/haptics @capacitor/keyboard @capacitor/status-bar


Copier après la connexion

The following command will create the native android project structure and files in your ionic project:

npx cap add android

Copier après la connexion

Important: Build the web app:

pnpm run build

Copier après la connexion

to avoid this error before we run sync

[error] Could not find the web assets directory: .\build.

... More info: https://capacitorjs.com/docs/basics/workflow#sync-your-project

Copier après la connexion

Once the build is finished, you can sync, copying the built web app; into the native webview:

npx cap sync

Copier après la connexion

Believe it or not, we are ready to either build or preview the native application in an emulator.

We'll dive deeper into Capacitor and native development, environment setup, etc., in the next article.

Since we are still getting a feel for Ionic, let's play with a few Ionic components and wrap up with a simple application example.

PokeApp Example

You can easily find Ionic components in the documentation.

We'll implement a simple app that fetches Pokémon data from the PokeAPI, for a compact card view, and then build it into an APK.

Android Dev with web Tools: fastest way to production with Ionic React

From the results, we can already see how decent the app looks with no styling—thanks to the power of Ionic components.

Open the ExploreContainer component, and we'll work on Tab 2.

Update the component and add the following:

const BASE_LINK = "https://pokeapi.co/api/v2/pokemon/"



const Tab2Content = () => { 



 const [pokemon, setPokemon] = useState("pikachu")



 useEffect(()=> {    

if(pokemon != ""){    

  fetch(BASE_LINK + pokemon).then(async(poke)=> {

       console.log(await poke.json())              

    }).catch((err)=>console.log(err))   

 } 



 }, [pokemon])  



// add some padding to the div below

return  (

  <div style={{padding: ".5em"}}>

        I am tab 2 content  
 </div>

)}

Copier après la connexion

We've added a state to track the Pokémon we want to look up, with the default being Pikachu:

const [pokemon, setPokemon] = useState("pikachu")

Copier après la connexion

On load, we fetch the Pokémon data from the PokeAPI:

 useEffect(()=> {    

if(pokemon != ""){    

  fetch(BASE_LINK + pokemon).then(async(poke)=> {

       console.log(await poke.json())              

    }).catch((err)=>console.log(err))    } 

 }, [pokemon])  



Copier après la connexion

Android Dev with web Tools: fastest way to production with Ionic React

The useEffect hook runs twice in React strict mode.

Instead of logging our result, let's turn it into a state so we can use it in our card component.

First, add a new useState under the Pokémon one:

 const [showResults, setResults] = useState()

Copier après la connexion

Then, update the useEffect to set the results::



 useEffect(()=> {
    if(pokemon != ""){
      fetch(BASE_LINK + pokemon).then(async(poke)=> {


       const results = await poke.json()
       const {front_default} = results.sprites
       setResults({front_default})


      }).catch((err)=> console.log(err))
    }
  }, [pokemon])

Copier après la connexion

The PokeAPI returns a lot of data. We are interested in the Pokémon image, specifically the front-facing image in the sprites object:

       const results = await poke.json()
       const {front_default} = results.sprites
       setResults({front_default})

Copier après la connexion

If you are familiar with React, you know we have created the re-render on state change loop already. Now, we just need to consume the data:



 return  (
  <div style={{padding: ".5em"}}>
 <IonCard>
      <IonCardHeader>
        <IonCardTitle>{pokemon}</IonCardTitle>

      </IonCardHeader>

      <IonCardContent>
         <img src={showResults ? showResults.front_default : ""} />
      </IonCardContent>
    </IonCard>
  </div>
  )

Copier après la connexion

We use an Ion card component to show the retrieved image:



   <IonCardContent>
         <img src={showResults ? showResults.front_default : ""} />
      </IonCardContent>



Copier après la connexion

We have a basic structure already, but we can only show the default Pokémon. We need a way to accept user input (a Pokémon name) and make a fetch request based on that input.

The basic React approach is to have an input element bound to a useState value, updating it on onChange. However, in our case, this is problematic because every keystroke will trigger our useEffect, making multiple erroneous requests to the PokeAPI.

Instead, we need the user to type fully and press a search button to initiate the API call. Copy the code below and paste it on top of the Ion card:



 <IonItem>
        <IonInput aria-label="Pokemon" value={pokemon} ref={pokeNameref}></IonInput>
      </IonItem>
      <IonButton onClick={()=> PokeSearch() }>search</IonButton>

</IonItem>



Copier après la connexion

From the code above, we need two things: a useRef pointing to our Ion input and a PokeSearch function triggered by an Ion button.

const Tab2Content = () => {
  const [pokemon, setPokemon] = useState("pikachu")
  const [showResults, setResults] = useState<any>()
  const pokeNameref = useRef<any>(null)

  const PokeSearch = () => {

    if(pokeNameref.current){

      console.log(pokeNameref.current.value)
         setPokemon(pokeNameref.current.value.toLocaleLowerCase())
    }
  }



....



}

Copier après la connexion

The code below is responsible for updating the state, triggering the effect

 if(pokeNameref.current){

      console.log(pokeNameref.current.value)
         setPokemon(pokeNameref.current.value.toLocaleLowerCase())
    }



Copier après la connexion

The entire component:

const Tab2Content = () => {
  const [pokemon, setPokemon] = useState("pikachu")
  const [showResults, setResults] = useState<any>()
  const pokeNameref = useRef<any>(null)

  const PokeSearch = () => {

    if(pokeNameref.current){

      console.log(pokeNameref.current.value)
      setPokemon(pokeNameref.current.value.toLocaleLowerCase())
    }
  }

  useEffect(()=> {
    if(pokemon != ""){
      fetch(BASE_LINK + pokemon).then(async(poke)=> {
       const results = await poke.json()
       console.log(results.sprites)
       const {front_default} = results.sprites
       setResults({front_default})
      }).catch((err)=> console.log(err))
    }
  }, [pokemon])

  return  (
  <div style={{padding: ".5em"}}>
      <IonItem>
        <IonInput aria-label="Pokemon" value={pokemon} ref={pokeNameref}></IonInput>
      </IonItem>
      <IonButton onClick={()=> PokeSearch() }>search</IonButton>
 <IonCard>
      <IonCardHeader>
        <IonCardTitle>{pokemon}</IonCardTitle>

      </IonCardHeader>

      <IonCardContent>
         <img src={showResults ? showResults.front_default : ""} />
      </IonCardContent>
    </IonCard>
  </div>
  )
}



Copier après la connexion

Our simple PokeApp is complete. Make sure ionic serve --lab is running and type a few Pokémon names, such as:

bulbasaur dragonite

Copier après la connexion

If everything is set up correctly, the Pokémon should change on search.

Not a life-changing application, but enough for learning Ionic. The next step requires Android Studio . Download it and follow the defaults while installing it.

PokeApp to APK

If you have never seen Android Studio, it’s probably the most complex IDE and has a steep learning curve!

I suggest following the defaults on installation and letting it run its course. My only suggestion is to select the option to install an emulator, which makes it easier to build and review the APK before bundling it.

When you download Android Studio for the first time, it'll download a lot of dependencies and set up Gradle, which may take some time. Let it do its thing. Gradle is a build tool for Android, similar to how we use Webpack or Vite in web development.

When you are ready and Android Studio is installed, navigate to our PokeApp in the terminal.

As an extra precaution, build and sync before opening the project in Android Studio to ensure there are no errors:

pnpm run build

npx cap sync

Copier après la connexion

If the build is successful, we can rest assured there are no errors in our application. Next, open the project in Android Studio:

npx cap open android

Copier après la connexion

Let the Gradle processes run:

Android Dev with web Tools: fastest way to production with Ionic React

When Gradle is done, try running the app in an emulator (top middle) in the IDE. If the app runs on the emulator, you can be sure it'll bundle to a standalone APK:

Android Dev with web Tools: fastest way to production with Ionic React

Check this extensive link for more ways to debug and run your APK: android studio run

Notes on Building the APK

There are a few steps involved in building an actual production APK for the Google Play Store, from setting up an Android console to creating banner images, which are tedious but essential tasks.

Note: The Android development account is a one-time fee. You can buy and set it up on Google Console.

Design, search keywords, and banners are beyond coding. This series is about getting the coding part right! I promise everything else will fall into place with practice and getting used to the tediousness of the Google Play Console.

In short, I will skip the Google Play Console for a few reasons:

  • It takes a while (2 weeks minimum) to get approved.
    When approved, the APK goes through a vetting process (takes time, may fail).

  • You can't submit an APK on Google Console unless you have banners and icons.

  • There is a lot of editing and icon generation for different screens.

These reasons make it impractical to include in a tutorial. But rest assured, what I will show you in this and upcoming articles will prepare you to build production-ready applications to publish in any store besides Google or for self-hosting.

However, if you already have a Google Play account, there are many articles and videos on publishing an Ionic Android app.

For our case, as long as we can generate a debug APK file and install it on an emulator or real phone, the other steps are just a Google search away!

Because this process is tedious, I will dedicate a separate article in this series to go through Android Studio, sign an APK, and build a release. For now, a debug APK will suffice as this article is already long.

Generating a debug apk

Look at your Android Studio top bar left; after the Android icon, there should be a hamburger menu button. Select to expand the menu. The build option is hidden there:

Android Dev with web Tools: fastest way to production with Ionic React

If the APK is generated successfully, a popup should show at the bottom right with a locate option, which will open the explorer to the APK path. You can share or install it on an Android device!

If you want to create a signed APK, the full production deal, Google has an extensive documentation

This was a high-level overview. We will go deeper with each article in the series.

Dans cet article, nous avons présenté le développement Android à l'aide d'outils Web, et notre framework de choix était Ionic. Nous avons couvert les bases des composants Ionic et Ionic, comment configurer le condensateur de pont d'exécution natif et créé un APK de débogage.

Si vous êtes prêt à plonger en profondeur dans Capacitor, vous pouvez trouver le prochain article ici : Capacitor JS : Le pont entre la technologie Web et le natif – Android, IOS, PWA

Ce n'est que le début.

Si vous êtes intéressé par un contenu plus long, exclusif et pratique, j'ai des niveaux et des publications conçus pour améliorer vos compétences en programmation sur la plateforme ko-fi.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!