Nếu bạn tham gia Flutter trong những ngày đầu, rất có thể bạn có một hoặc hai dự án được tạo trước phiên bản 1.12 của Flutter. Nếu đúng như vậy, bạn có thể đã thấy thông báo này bất cứ khi nào bạn chạy Pub get trong một trong các dự án của mình:
Ứng dụng này đang sử dụng phiên bản nhúng của Android không còn được dùng nữa.
Để tránh lỗi thời gian chạy không mong muốn hoặc lỗi xây dựng trong tương lai, hãy thử di chuyển ứng dụng này sang bản nhúng V2.
Hãy xem tài liệu về cách di chuyển ứng dụng:https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects
Bây giờ, bản thân tài liệu có các bước bạn cần thực hiện để làm cho cảnh báo này biến mất, nhưng không phải lúc nào nó cũng làm rõ những gì cần thay đổi và ở đâu.
Bài viết này sẽ cung cấp cho bạn hướng dẫn từng bước về cách di chuyển ứng dụng Flutter của bạn sang V2 Embedding để bạn có thể vĩnh viễn loại bỏ cảnh báo đó.
Di chuyển tự động – Lối thoát dễ dàng
Cần phải nói rằng bạn có thể từ bỏ quá trình di chuyển này nếu ứng dụng của bạn có thể được tạo lại dễ dàng. Vậy điều đó có nghĩa là gì?
Chà, nếu mã trong ứng dụng của bạn không phức tạp thì bạn chỉ cần lưu các tệp trong thư mục lib của mình và tạo một dự án mới bằng cách sử dụng flutter create . Bằng cách đó, bạn sẽ có một dự án đã được di chuyển sang Nhúng V2 và sẽ chỉ cần sao chép và dán mã bạn có trong thư mục lib của mình.
Tuy nhiên, nếu dự án của bạn phức tạp hơn – giả sử đó là một gói có mã dành riêng cho nền tảng – bạn có thể sẽ tốt hơn nếu di chuyển nó theo cách thủ công.
Di chuyển thủ công – Thực hiện theo các bước sau
- Mở Hoạt động chính Tệp .kt (hoặc .java) trong ứng dụng của bạn
- Bạn cần xóa mọi nội dung có trong tệp này và chỉ để trống phần khai báo lớp (trừ khi bạn có logic cụ thể ở đó).
- Xóa tất cả nội dung nhập và đảm bảo có một nội dung nhập như sau:
import io.flutter.embedding.android.FlutterActivity;
Kết quả cuối cùng sẽ như sau:
import io.flutter.embedding.android.FlutterActivity;
public class MainActivity extends FlutterActivity {
// Nothing should be here
}
- Mở tệp AndroidManifest.xml và thay đổi thuộc tính tên trong thẻ ứng dụng thành
${applicationName}– vì vậy nó trông như thế này:
<application
android:name="${applicationName}">
....
</application>
- Bạn cần thêm dữ liệu meta sau vào thẻ ứng dụng của mình:
<meta-data
android:name="flutterEmbedding"
android:value="2" />
- Nếu bạn muốn có một hành vi cụ thể trên màn hình Splash, bạn sẽ cần xóa thẻ meta màn hình Splash:
<meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" />
- Sau đó, hãy truy cập tệp styles.xml của bạn và định cấu hình LaunchTheme ở đó với đối tượng có thể vẽ theo ý thích của bạn:
<?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 của bạn sẽ trông giống như thế này sau tất cả những thay đổi ở trên:
<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>
Hỗ trợ AndroidX
Dự án của bạn cũng có thể cần được di chuyển để sử dụng thư viện AndroidX thay vì các thư viện hỗ trợ cũ hơn. Bạn sẽ được cảnh báo về điều này khi xây dựng và chạy ứng dụng của mình:
Ứng dụng của bạn hiện không sử dụng AndroidX. Để tránh khả năng xảy ra lỗi khi xây dựng, bạn có thể nhanh chóng di chuyển ứng dụng của mình bằng cách làm theo các bước trên https://goo.gl/CP92wY.
Việc khắc phục vấn đề này khá đơn giản vì Android Studio đã tích hợp sẵn tính năng hỗ trợ di chuyển sang AndroidX.
Bắt đầu bằng cách mở thư mục Android của ứng dụng Flutter của bạn dưới dạng một dự án độc lập
Nhấp vào Refactor → Di chuyển sang AndroidX:
Menu thả xuống để Di chuyển sang AndroidX
Sau đó, bạn sẽ được nhắc lưu bản sao dự án của mình và sau đó, quá trình di chuyển sẽ diễn ra.
Lỗi bạn có thể thấy
Trong quá trình di chuyển này, bạn có thể gặp một số lỗi khi xây dựng ứng dụng của mình. Nổi bật nhất là:
- Không thể lấy bản đồ biến môi trường Windows có thể thay đổi
- cvc-complex-type.2.4.a:Tìm thấy nội dung không hợp lệ bắt đầu bằng phần tử 'base-extension'. Dự kiến sẽ có một trong số ‘{layoutlib}’
- Cảnh báo:Phiên bản này chỉ hiểu phiên bản SDK XML tối đa 2 nhưng đã gặp phải tệp SDK XML phiên bản 3. Điều này có thể xảy ra nếu bạn sử dụng các phiên bản Android Studio và các công cụ dòng lệnh được phát hành vào những thời điểm khác nhau
Hai lỗi đầu tiên có liên quan với nhau và đều xuất phát từ cùng một nguyên nhân gốc rễ. Đó là do dự án của bạn đã được thiết lập với phiên bản Gradle cũ và cần phải nâng cấp nó.
Để làm như vậy, hãy làm theo các bước sau:
- Mở thư mục Android trong ứng dụng Flutter của bạn dưới dạng một dự án độc lập
- Nhấp vào Tệp → Cấu trúc dự án:
Menu thả xuống để chọn Cấu trúc dự án
- Thay đổi phiên bản Gradle thành phiên bản mới hơn và phù hợp với phiên bản Android Studio hiện tại bạn đang sử dụng
Màn hình cài đặt AGP và Gradle
Bạn cũng có thể sử dụng Trợ lý nâng cấp AGP để thực hiện việc này bằng cách đi tới Công cụ → Trợ lý nâng cấp AGP:
Menu thả xuống để nâng cấp AGP bằng Trợ lý nâng cấp AGP
Vấn đề thứ ba, là một cảnh báo, có thể xảy ra do có phiên bản cũ của Công cụ SDK Android. Để tìm hiểu cách thực hiện điều đó, bạn có thể vào đây.
Dự án của bạn hiện đã được di chuyển hoàn toàn, biên dịch và chạy trơn tru.
Nếu bạn muốn đọc các bài viết khác tôi đã viết, bạn có thể xem chúng tại đây:
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu