Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Android

บทช่วยสอน Flutter:ย้ายแอปของคุณไปยังการฝัง Android V2 ล่าสุด

บทช่วยสอน Flutter:ย้ายแอปของคุณไปยังการฝัง Android V2 ล่าสุด

หากคุณกระโดดขึ้นไปบน Flutter bandwagon ในช่วงแรกๆ เป็นไปได้ว่าคุณจะมีโปรเจ็กต์หนึ่งหรือสองโปรเจ็กต์ที่สร้างขึ้นก่อน Flutter เวอร์ชัน 1.12 หากเป็นเช่นนั้น คุณอาจเห็นข้อความนี้ทุกครั้งที่คุณเรียกใช้ Pub get ในโปรเจ็กต์ใดโปรเจ็กต์ของคุณ:

แอปนี้ใช้การฝัง Android เวอร์ชันที่เลิกใช้งานแล้ว
เพื่อหลีกเลี่ยงความล้มเหลวรันไทม์ที่ไม่คาดคิดหรือความล้มเหลวของบิลด์ในอนาคต ให้ลองย้ายแอปนี้ไปยังการฝัง V2

ดูเอกสารสำหรับการย้ายแอป:https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects

ขณะนี้เอกสารมีขั้นตอนที่คุณต้องปฏิบัติตามเพื่อทำให้คำเตือนนี้หายไป แต่ก็ไม่ได้ชี้แจงเสมอไปว่าจะเปลี่ยนแปลงอะไรและที่ไหน

บทความนี้จะให้คำแนะนำแบบทีละขั้นตอนในการย้ายแอปพลิเคชัน Flutter ของคุณไปยัง V2 Embedding เพื่อให้คุณสามารถทำให้คำเตือนนั้นหายไปตลอดกาล

การย้ายข้อมูลอัตโนมัติ – ทางออกที่ง่ายดาย

ต้องบอกว่าคุณสามารถละทิ้งกระบวนการย้ายข้อมูลนี้ได้หากสามารถสร้างแอปพลิเคชันของคุณขึ้นมาใหม่ได้อย่างง่ายดาย แล้วนั่นหมายความว่าอย่างไร?

ถ้าโค้ดในแอปพลิเคชันของคุณไม่ซับซ้อน คุณก็สามารถบันทึกไฟล์ในโฟลเดอร์ lib ของคุณและสร้างโปรเจ็กต์ใหม่โดยใช้ flutter create . ด้วยวิธีนี้ คุณจะมีโปรเจ็กต์ที่ถูกย้ายไปยัง V2 Embedding แล้ว และจะต้องคัดลอกและวางโค้ดที่คุณมีในโฟลเดอร์ lib ของคุณ

แต่หากโปรเจ็กต์ของคุณซับซ้อนกว่านี้ สมมติว่าเป็นแพ็คเกจที่มีโค้ดเฉพาะแพลตฟอร์ม คุณน่าจะดีกว่าหากย้ายด้วยตนเอง

การย้ายข้อมูลด้วยตนเอง – ทำตามขั้นตอนเหล่านี้

  1. เปิด กิจกรรมหลัก .kt (หรือ .java) ในแอปพลิเคชันของคุณ
  2. คุณต้องลบเนื้อหาใดๆ ที่ไฟล์นี้มี และปล่อยทิ้งไว้พร้อมกับการประกาศคลาส (เว้นแต่คุณจะมีเหตุผลเฉพาะเจาะจง)
  3. ลบการนำเข้าทั้งหมด และตรวจสอบให้แน่ใจว่ามีหนึ่งการนำเข้าที่เป็นดังนี้:
import io.flutter.embedding.android.FlutterActivity;

ผลลัพธ์ที่ได้ควรเป็นดังนี้:

import io.flutter.embedding.android.FlutterActivity;
public class MainActivity extends FlutterActivity { 
 // Nothing should be here
}
  1. เปิดไฟล์ AndroidManifest.xml และเปลี่ยนแอตทริบิวต์ชื่อใต้แท็กแอปพลิเคชันเป็น ${applicationName} – ดูเหมือนว่านี้:
<application 
 android:name="${applicationName}"> 
 .... 
</application>
  1. คุณต้องเพิ่มข้อมูลเมตาต่อไปนี้ภายในแท็กแอปพลิเคชันของคุณ:
<meta-data 
 android:name="flutterEmbedding" 
 android:value="2" />
  1. หากคุณต้องการลักษณะการทำงานของหน้าจอ Splash โดยเฉพาะ คุณจะต้องลบเมตาแท็กของหน้าจอ Splash ออก:
<meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" />
  1. จากนั้นไปที่ไฟล์ styles.xml ของคุณและกำหนดค่า LaunchTheme ที่นั่นตามที่คุณต้องการ:
<?xml version="1.0" encoding="utf-8"?>
<resources> 
 <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> <item name="android:windowBackground">@drawable/launch_background
 </item> 
 </style>
</resources>

AndroidManifest.xml ของคุณจะมีลักษณะดังนี้หลังจากการเปลี่ยนแปลงทั้งหมดข้างต้น:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="PACKAGE_NAME">
<application 
 android:name="${applicationName}" 
 android:label="APPLICATION_LABEL" 
 android:icon="@mipmap/ic_launcher"> 
 <activity 
 android:name=".MainActivity"
 android:exported="true" 
 android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> 
 <intent-filter> 
 <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> 
 </intent-filter> 
 </activity> 
 <meta-data 
 android:name="flutterEmbedding" 
 android:value="2" /> 
 </application>
</manifest>

รองรับ AndroidX

อาจจำเป็นต้องย้ายโปรเจ็กต์ของคุณเพื่อใช้ไลบรารี AndroidX แทนไลบรารีการสนับสนุนรุ่นเก่า คุณจะได้รับการแจ้งเตือนเมื่อคุณสร้างและเรียกใช้แอปพลิเคชันของคุณ:

แอปของคุณไม่ได้ใช้ AndroidX เพื่อหลีกเลี่ยงไม่ให้บิลด์ล้มเหลว คุณสามารถย้ายแอปของคุณได้อย่างรวดเร็วโดยทำตามขั้นตอนใน https://goo.gl/CP92wY

การแก้ไขนี้ค่อนข้างง่าย เนื่องจาก Android Studio ในตัวรองรับการโยกย้ายไปยัง AndroidX

เริ่มต้นด้วยการเปิดโฟลเดอร์ Android ของแอปพลิเคชัน Flutter ของคุณเป็นโปรเจ็กต์แบบสแตนด์อโลน

คลิกที่ Refactor → โยกย้ายไปยัง AndroidX:

บทช่วยสอน Flutter:ย้ายแอปของคุณไปยังการฝัง Android V2 ล่าสุด เมนูแบบเลื่อนลงเพื่อโยกย้ายไปยัง AndroidX

จากนั้นคุณจะได้รับแจ้งให้บันทึกสำเนาของโครงการของคุณและหลังจากนั้น กระบวนการย้ายข้อมูลจะเกิดขึ้น

ข้อผิดพลาดที่คุณอาจพบ

ในระหว่างกระบวนการย้ายข้อมูลนี้ คุณอาจพบข้อผิดพลาดหลายประการเมื่อสร้างแอปพลิเคชันของคุณ สิ่งที่โดดเด่นที่สุดคือ:

  • ไม่สามารถรับแมปตัวแปรสภาพแวดล้อม Windows ที่ไม่แน่นอนได้
  • cvc-complex-type.2.4.a:พบเนื้อหาที่ไม่ถูกต้องเริ่มต้นด้วยองค์ประกอบ 'base-extension' คาดหวังหนึ่งใน '{layoutlib}'
  • คำเตือน:เวอร์ชันนี้เข้าใจเฉพาะ SDK XML เวอร์ชันสูงสุด 2 แต่พบไฟล์ SDK XML เวอร์ชัน 3 กรณีนี้อาจเกิดขึ้นได้หากคุณใช้เวอร์ชันของ Android Studio และเครื่องมือบรรทัดคำสั่งที่เผยแพร่ในเวลาที่ต่างกัน

ข้อผิดพลาดสองข้อแรกเกี่ยวข้องกัน และทั้งสองมีสาเหตุมาจากสาเหตุเดียวกัน เป็นเพราะโปรเจ็กต์ของคุณได้รับการตั้งค่าด้วย Gradle เวอร์ชันเก่าและจำเป็นต้องอัปเกรด

โดยทำตามขั้นตอนเหล่านี้:

  1. เปิดโฟลเดอร์ Android ในแอปพลิเคชัน Flutter ของคุณเป็นโครงการแบบสแตนด์อโลน
  2. คลิกที่ไฟล์ → โครงสร้างโครงการ:

บทช่วยสอน Flutter:ย้ายแอปของคุณไปยังการฝัง Android V2 ล่าสุด เมนูแบบเลื่อนลงเพื่อเลือกโครงสร้างโครงการ

  1. เปลี่ยนเวอร์ชัน Gradle เป็นเวอร์ชันที่ใหม่กว่าและตรงกับเวอร์ชัน Android Studio ปัจจุบันที่คุณใช้อยู่

บทช่วยสอน Flutter:ย้ายแอปของคุณไปยังการฝัง Android V2 ล่าสุด หน้าจอการตั้งค่า AGP และ Gradle

คุณยังสามารถใช้ AGP Upgrade Assistant เพื่อทำสิ่งนี้ได้เช่นกัน โดยไปที่ Tools →AGP Upgrade Assistant:

บทช่วยสอน Flutter:ย้ายแอปของคุณไปยังการฝัง Android V2 ล่าสุด เมนูแบบเลื่อนลงเพื่ออัปเกรด AGP โดยใช้ AGP Upgrade Assistant

ปัญหาที่สามซึ่งเป็นคำเตือนอาจเกิดจากการมี Android SDK Tools เวอร์ชันเก่า หากต้องการเรียนรู้วิธีดำเนินการ โปรดไปที่นี่

ตอนนี้โปรเจ็กต์ของคุณควรได้รับการโยกย้าย รวบรวม และทำงานได้อย่างราบรื่น

หากคุณต้องการอ่านบทความอื่นๆ ที่ฉันเขียน คุณสามารถดูได้ที่นี่:

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น