หากคุณกระโดดขึ้นไปบน 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 ของคุณ
แต่หากโปรเจ็กต์ของคุณซับซ้อนกว่านี้ สมมติว่าเป็นแพ็คเกจที่มีโค้ดเฉพาะแพลตฟอร์ม คุณน่าจะดีกว่าหากย้ายด้วยตนเอง
การย้ายข้อมูลด้วยตนเอง – ทำตามขั้นตอนเหล่านี้
- เปิด กิจกรรมหลัก .kt (หรือ .java) ในแอปพลิเคชันของคุณ
- คุณต้องลบเนื้อหาใดๆ ที่ไฟล์นี้มี และปล่อยทิ้งไว้พร้อมกับการประกาศคลาส (เว้นแต่คุณจะมีเหตุผลเฉพาะเจาะจง)
- ลบการนำเข้าทั้งหมด และตรวจสอบให้แน่ใจว่ามีหนึ่งการนำเข้าที่เป็นดังนี้:
import io.flutter.embedding.android.FlutterActivity;
ผลลัพธ์ที่ได้ควรเป็นดังนี้:
import io.flutter.embedding.android.FlutterActivity;
public class MainActivity extends FlutterActivity {
// Nothing should be here
}
- เปิดไฟล์ AndroidManifest.xml และเปลี่ยนแอตทริบิวต์ชื่อใต้แท็กแอปพลิเคชันเป็น
${applicationName}– ดูเหมือนว่านี้:
<application
android:name="${applicationName}">
....
</application>
- คุณต้องเพิ่มข้อมูลเมตาต่อไปนี้ภายในแท็กแอปพลิเคชันของคุณ:
<meta-data
android:name="flutterEmbedding"
android:value="2" />
- หากคุณต้องการลักษณะการทำงานของหน้าจอ Splash โดยเฉพาะ คุณจะต้องลบเมตาแท็กของหน้าจอ Splash ออก:
<meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" />
- จากนั้นไปที่ไฟล์ 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:
เมนูแบบเลื่อนลงเพื่อโยกย้ายไปยัง AndroidX ป>
จากนั้นคุณจะได้รับแจ้งให้บันทึกสำเนาของโครงการของคุณและหลังจากนั้น กระบวนการย้ายข้อมูลจะเกิดขึ้น
ข้อผิดพลาดที่คุณอาจพบ
ในระหว่างกระบวนการย้ายข้อมูลนี้ คุณอาจพบข้อผิดพลาดหลายประการเมื่อสร้างแอปพลิเคชันของคุณ สิ่งที่โดดเด่นที่สุดคือ:
- ไม่สามารถรับแมปตัวแปรสภาพแวดล้อม Windows ที่ไม่แน่นอนได้
- cvc-complex-type.2.4.a:พบเนื้อหาที่ไม่ถูกต้องเริ่มต้นด้วยองค์ประกอบ 'base-extension' คาดหวังหนึ่งใน '{layoutlib}'
- คำเตือน:เวอร์ชันนี้เข้าใจเฉพาะ SDK XML เวอร์ชันสูงสุด 2 แต่พบไฟล์ SDK XML เวอร์ชัน 3 กรณีนี้อาจเกิดขึ้นได้หากคุณใช้เวอร์ชันของ Android Studio และเครื่องมือบรรทัดคำสั่งที่เผยแพร่ในเวลาที่ต่างกัน
ข้อผิดพลาดสองข้อแรกเกี่ยวข้องกัน และทั้งสองมีสาเหตุมาจากสาเหตุเดียวกัน เป็นเพราะโปรเจ็กต์ของคุณได้รับการตั้งค่าด้วย Gradle เวอร์ชันเก่าและจำเป็นต้องอัปเกรด ป>
โดยทำตามขั้นตอนเหล่านี้:
- เปิดโฟลเดอร์ Android ในแอปพลิเคชัน Flutter ของคุณเป็นโครงการแบบสแตนด์อโลน
- คลิกที่ไฟล์ → โครงสร้างโครงการ:
เมนูแบบเลื่อนลงเพื่อเลือกโครงสร้างโครงการ ป>
- เปลี่ยนเวอร์ชัน Gradle เป็นเวอร์ชันที่ใหม่กว่าและตรงกับเวอร์ชัน Android Studio ปัจจุบันที่คุณใช้อยู่
หน้าจอการตั้งค่า AGP และ Gradle ป>
คุณยังสามารถใช้ AGP Upgrade Assistant เพื่อทำสิ่งนี้ได้เช่นกัน โดยไปที่ Tools →AGP Upgrade Assistant:
เมนูแบบเลื่อนลงเพื่ออัปเกรด AGP โดยใช้ AGP Upgrade Assistant ป>
ปัญหาที่สามซึ่งเป็นคำเตือนอาจเกิดจากการมี Android SDK Tools เวอร์ชันเก่า หากต้องการเรียนรู้วิธีดำเนินการ โปรดไปที่นี่
ตอนนี้โปรเจ็กต์ของคุณควรได้รับการโยกย้าย รวบรวม และทำงานได้อย่างราบรื่น ป>
หากคุณต้องการอ่านบทความอื่นๆ ที่ฉันเขียน คุณสามารถดูได้ที่นี่:
เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น