Trình bày cách tạo ra một ứng dụng đa ngôn ngữ trong android!
By Trần Duy Thanh on May 15, 2013 Show
– Bài tập này Tôi sẽ hướng dẫn các bạn cách tạo đa ngôn ngữ trong Android. – Mobile trở thành thiết bị không thể thiếu được trên thế giới này. Người làm ruộng, bán vé số, bán bánh mì, nhân viên văn phòng, giám đốc, nhân viên bán hàng, bán tùm lum… every body…. đều sở hữu 1 chú Dế. – Hỗ trợ đa ngôn ngữ giúp phần mềm ta bán chạy, mục tiêu viết phần mềm ra để bán kiếm tiền chứ không phải viết ra để tự kỷ 1 mình. Nên các bạn phải biết làm đa ngôn ngữ. – Bài tập này Tôi sẽ làm 3 ngôn ngữ: Tiếng Anh, Tiếng Pháp, Tiếng Việt.– Tiếng Pháp Tôi không biết gì cả (1 chữ cắn đôi không biết, như chữ “Không” bẻ đôi (dọc hoặc ngang) ra đọc bằng tiếng Pháp thì Tôi không biết được), Tôi dịch trên google. – Đa ngôn ngữ chỉ là làm trên XML resource là chính (coding không phải sửa đổi, chỉ sửa resource theo đúng ngôn ngữ). Khi ta làm đúng ngôn ngữ theo resource thì khi người sử dụng chuyển ngôn ngữ trong Android nó sẽ tự tải đúng resource ngôn ngữ mà ta đã tạo. – Cấu hình ngôn ngữ trong Android (bạn từ mò), Tôi chụp màn hình bên trong để chọn ngôn ngữ: – Tôi có ví dụ về 4 mùa trong năm: xuân, hạ , thu ,đông: – Khi Setting trong Android là tiếng Anh: – Tiếng Pháp: – Tiếng việt: – Bạn chú ý là các hình trên Tôi hoàn toàn không sửa đổi coding, Tôi chỉ đổi ngôn ngữ trong Android, nó tự động tải đúng Resource XML ngôn ngữ.– Cách tạo Resource XML ngôn ngữ: – Cần chú ý: tất cả các string resource id ở các ngôn ngữ khác nhau đều phải có cùng id. – Mỗi một Quốc gia sẽ có một Code riêng với 2 ký tự: -Bấm chuột phải vào Android Project/ chọn Android XML resource:– Màn hình trên hiển thị ra. Bạn chọn vào mục Language rồi click biểu tượng số 1. – Language sẽ hiển thị vào danh sách ở giữa – ở mục số 2 bạn chọn Code Quốc gia (theo ngôn ngữ) – Mục Folder ở số 3 sẽ được nối kèm ở đằng sau values. – Bạn xem cấu trúc thư mục của Android Project sau khi bạn chọn ngôn ngữ xong (ở đây là tiếng anh, tiếng pháp, tiếng việt): -Bạn xem 3 tập tin strings.xml ở 3 ngôn ngữ khác nhau (nhớ là phải cùng id): – Xem XML layout: – Xem coding: – Bây giờ bạn chỉ cần việc đổi chuyển ngôn ngữ trong Setting là xong, tự nhiên nó sẽ lấy đúng XML resource ngôn ngữ mà bạn tạo. – Bạn tải coding mẫu ở đây: http://www.mediafire.com/?owbph611tqxtt50 – Bài tập này không khó, các bạn chỉ cần làm theo hướng dẫn. – Bài tập sau các bạn sẽ học về xử lý tập tin trong Android, cũng khá quan trọng và hay, các bạn hãy chú ý theo dõi.
Bạn có thể thực thi tất cả tác vụ tạo bản dựng (build task) có sẵn cho dự án Android bằng cách sử dụng công cụ dòng lệnh trình bao bọc Gradle (Gradle wrapper). Công cụ này có sẵn dưới dạng tệp xử lý lệnh theo lô (batch file) cho Windows (gradlew.bat) và tập lệnh shell cho Linux và Mac (gradlew.sh). Bạn có thể truy cập tệp này qua thư mục gốc của mỗi dự án được tạo bằng Android Studio. Để chạy một tác vụ bằng trình bao bọc này, hãy sử dụng một trong các lệnh sau đây trên cửa sổ dòng lệnh (trong Android Studio, chọn View (Xem) > Tool Windows (Cửa sổ công cụ) > Terminal (Dòng lệnh)):
Để xem danh sách tất cả tác vụ tạo bản dựng có sẵn cho dự án, hãy thực thi lệnh tasks: gradlew tasksPhần còn lại của trang này sẽ mô tả các khái niệm cơ bản để tạo và chạy ứng dụng bằng trình bao bọc Gradle. Để tìm hiểu thêm về cách thiết lập bản dựng Android, hãy xem phần nội dung Định cấu hình bản dựng. Nếu muốn sử dụng các công cụ Android Studio thay vì công cụ dòng lệnh, hãy xem phần nội dung Tạo và chạy ứng dụng. Giới thiệu về các loại bản dựngTheo mặc định, có hai loại bản dựng có sẵn cho mọi ứng dụng Android: một loại dùng để gỡ lỗi ứng dụng – bản gỡ lỗi – và một loại dùng để phát hành ứng dụng cho người dùng – bản phát hành. Kết quả đầu ra cho mỗi bản dựng phải được ký bằng một chứng chỉ trước khi triển khai ứng dụng trên một thiết bị. Bản gỡ lỗi được ký tự động bằng một khoá gỡ lỗi do các công cụ SDK cung cấp (khoá này không an toàn và bạn không thể phát hành bằng khoá này lên Cửa hàng Google Play). Bản phát hành phải được ký bằng khoá riêng tư của chính bạn. Nếu muốn tạo ứng dụng cho bản phát hành, bạn cũng cần ký ứng dụng bằng khoá ký (signing key) thích hợp. Tuy nhiên, nếu chỉ mới bắt đầu, bạn có thể nhanh chóng chạy các ứng dụng của mình trên một trình mô phỏng hoặc thiết bị được kết nối bằng cách tạo một tệp APK gỡ lỗi. Bạn cũng có thể định nghĩa loại bản dựng tuỳ chỉnh trong tệp build.gradle và định cấu hình loại bản dựng này để được ký ở dạng bản gỡ lỗi bằng cách thêm vào debuggable true. Để tìm hiểu thêm thông tin, hãy xem phần nội dung Định cấu hình biến thể bản dựng. Tạo và triển khai tệp APKMặc dù tạo gói ứng dụng là cách tốt nhất để đóng gói ứng dụng và tải lên Play Console, việc tạo một tệp APK sẽ phù hợp hơn khi bạn muốn nhanh chóng kiểm thử bản gỡ lỗi hoặc chia sẻ ứng dụng cho người khác dưới dạng một cấu phần triển khai phần mềm. Tạo tệp APK gỡ lỗiĐể kiểm thử và gỡ lỗi ứng dụng tức thì, bạn có thể tạo tệp APK gỡ lỗi. Tệp APK gỡ lỗi được ký bằng một khoá gỡ lỗi do các công cụ SDK cung cấp và cho phép gỡ lỗi thông qua adb. Để tạo một tệp APK gỡ lỗi, hãy mở công cụ dòng lệnh và chuyển đến thư mục gốc của dự án. Để khởi tạo bản gỡ lỗi, hãy gọi tác vụ assembleDebug: gradlew assembleDebugThao tác này sẽ tạo ra một tệp APK có tên là module_name-debug.apk trong project_name/module_name/build/outputs/apk/. Tệp này đã được ký bằng khoá gỡ lỗi và được điều chỉnh bằng zipalign. Nhờ vậy, bạn có thể cài đặt ngay tệp này trên một thiết bị. Hoặc để tạo tệp APK này và cài đặt ngay trên một trình mô phỏng hoặc thiết bị được kết nối đang chạy, hãy gọi installDebug: gradlew installDebugPhần "Debug" trong tên của tác vụ ở trên chỉ là phiên bản viết tắt theo quy ước camel của tên biến thể bản dựng, vì vậy, bạn có thể thay thế phần này bằng bất kỳ loại bản dựng hoặc biến thể nào mà bạn muốn kết hợp hoặc cài đặt. Ví dụ: nếu bạn có phiên bản sản phẩm "demo" thì bạn có thể tạo phiên bản gỡ lỗi với tác vụ là assembleDemoDebug. Để xem tất cả tác vụ tạo và cài đặt có sẵn cho từng biến thể (bao gồm tác vụ gỡ cài đặt), hãy chạy tác vụ tasks. Ngoài ra, hãy xem phần nội dung về cách chạy ứng dụng trên trình mô phỏng và chạy ứng dụng trên một thiết bị. Tạo gói phát hành hoặc tệp APKKhi đã sẵn sàng phát hành và phân phối ứng dụng, bạn phải tạo một gói phát hành hoặc tệp APK được ký bằng khoá riêng tư của bạn. Để tìm hiểu thêm thông tin, hãy chuyển đến phần nội dung về cách ký ứng dụng bằng dòng lệnh. Triển khai ứng dụng trên trình mô phỏngĐể sử dụng Trình mô phỏng Android, bạn phải tạo Thiết bị Android ảo (AVD) bằng Android Studio. Khi đã có AVD, bạn hãy khởi động Trình mô phỏng Android và cài đặt ứng dụng như sau:
Để tìm hiểu thêm thông tin, hãy xem phần nội dung Chạy ứng dụng trên Trình mô phỏng Android. Triển khai ứng dụng trên một thiết bị thực tếTrước khi chạy ứng dụng trên một thiết bị, bạn phải bật tính năng gỡ lỗi USB trên thiết bị. Bạn có thể tìm thấy tuỳ chọn này trong phần Settings (Cài đặt) > Developer options (Tuỳ chọn cho nhà phát triển). Lưu ý: Trên Android 4.2 trở lên, Developer options (Tuỳ chọn cho nhà phát triển) sẽ bị ẩn theo mặc định. Để mở giao diện này, hãy chuyển đến phần Settings (Cài đặt) > About phone (Giới thiệu về điện thoại) rồi nhấn vào Build number (Số bản dựng) bảy lần. Quay lại màn hình trước để tìm Developer options (Tuỳ chọn cho nhà phát triển). Sau khi thiết lập và kết nối thiết bị qua USB, bạn có thể cài đặt ứng dụng bằng cách sử dụng tác vụ cài đặt Gradle được đề cập trong phần nội dung về cáchtạo một tệp APK gỡ lỗi hoặc công cụ adb: adb -d install path/to/your_app.apkToàn bộ tệp APK bạn xây dựng đều được lưu trong project_name/module_name/build/outputs/apk/. Để tìm hiểu thêm thông tin, hãy xem phần nội dung Chạy ứng dụng trên thiết bị phần cứng. Tạo gói ứng dụngAndroid App Bundle chứa tất cả tài nguyên và mã đã biên dịch của ứng dụng, nhưng lại làm chậm quá trình tạo tệp APK và đăng nhập vào Google Play. Không giống APK, bạn không thể triển khai gói ứng dụng trực tiếp trên thiết bị. Vì vậy, nếu muốn nhanh chóng kiểm thử hoặc chia sẻ tệp APK với người khác, bạn nên tạo tệp APK. Cách dễ nhất để tạo gói ứng dụng là sử dụng Android Studio. Tuy nhiên, nếu cần tạo gói ứng dụng bằng dòng lệnh, bạn có thể thực hiện bằng cách sử dụng Gradle hoặc bundletool, như mô tả trong các phần bên dưới. Tạo gói ứng dụng bằng GradleNếu bạn muốn tạo một gói ứng dụng bằng dòng lệnh, hãy chạy tác vụ Gradle bundleVariant trên mô-đun cơ sở của ứng dụng đó. Ví dụ: lệnh sau đây tạo một gói ứng dụng cho phiên bản gỡ lỗi của mô-đun cơ sở: ./gradlew :base:bundleDebugNếu muốn tạo một gói đã ký tên để tải lên Play Console, trước tiên, bạn cần định cấu hình tệp build.gradle của mô-đun cơ sở với thông tin chữ ký của ứng dụng. Để tìm hiểu thêm, hãy chuyển đến phần nội dung về cách Định cấu hình Gradle để ký ứng dụng. Chẳng hạn, bạn có thể tạo phiên bản phát hành của ứng dụng và Gradle sẽ tự động tạo một gói ứng dụng và ký gói ứng dụng đó bằng thông tin chữ ký bạn cung cấp trong tệp build.gradle. Ngược lại, nếu bạn muốn ký một gói ứng dụng bằng một bước riêng biệt, bạn có thể sử dụng jarsigner để ký gói ứng dụng bằng dòng lệnh. Lưu ý: Bạn không thể sử dụng apksigner để ký gói ứng dụng của mình.Tạo gói ứng dụng bằng bundletoolbundletool là công cụ dòng lệnh được Android Studio, trình bổ trợ Android cho Gradle và Google Play dùng để chuyển đổi mã và tài nguyên đã biên dịch của ứng dụng thành các gói ứng dụng, đồng thời tạo ra các tệp APK có thể triển khai qua các gói đó. Như vậy, việc kiểm thử các gói ứng dụng bằng bundletool và tái tạo trong phạm vi cục bộ về cách Google Play tạo các tệp APK mang lại nhiều giá trị hữu ích. Tuy nhiên, thông thường, bạn không cần gọi bundletool để tạo gói ứng dụng, thay vào đó, bạn nên sử dụng các tác vụ Android Studio hoặc Gradle như đã mô tả trong các phần trước. Mặc dù vậy, nếu bạn không muốn sử dụng các tác vụ Android Studio hoặc Gradle để tạo các gói, chẳng hạn như bạn muốn sử dụng chuỗi công cụ tạo bản dựng tuỳ chỉnh, bạn có thể sử dụng bundletool bằng dòng lệnh để tạo một gói ứng dụng qua mã và tài nguyên được biên dịch sẵn. Nếu bạn chưa làm điều đó, hãy tải bundletool xuống qua kho lưu trữ GitHub. Phần này mô tả cách đóng gói tài nguyên và mã đã biên dịch của ứng dụng cũng như cách sử dụng bundletool bằng dòng lệnh để chuyển đổi mã và tài nguyên này thành Android App Bundle. Tạo tệp kê khai và tài nguyên ở định dạng protobundletool yêu cầu bạn cung cấp một số thông tin nhất định về dự án ứng dụng, chẳng hạn như tệp kê khai và tài nguyên của ứng dụng, ở định dạng Vùng đệm giao thức của Google – còn được gọi là "protobuf" và sử dụng đuôi tệp là *.pb. Protobuf cung cấp một cơ chế trung lập về ngôn ngữ, trung lập về nền tảng và có thể mở rộng, giúp chuyển đổi tuần tự dữ liệu có cấu trúc — tương tự như XML, nhưng nhỏ gọn hơn, nhanh hơn và đơn giản hơn. Tải AAPT2 xuốngBạn có thể tạo tệp kê khai và bảng tài nguyên của ứng dụng ở định dạng protobuf bằng cách sử dụng phiên bản AAPT2 mới nhất trên kho lưu trữ Google Maven. Thận trọng: Không sử dụng phiên bản AAPT2 đính kèm trong gói công cụ bản dựng Android — phiên bản AAPT2 đó không hỗ trợ bundletool.Để tải AAPT2 xuống qua kho lưu trữ Maven của Google, hãy tiến hành các bước sau:
Sử dụng AAPT2 để biên dịch tài nguyên trong ứng dụng bằng lệnh sau: aapt2 compile \ project_root/module_root/src/main/res/drawable/Image1.png \ project_root/module_root/src/main/res/drawable/Image2.png \ -o compiled_resources/ Lưu ý: Bạn có thể chuyển các thư mục tài nguyên đến AAPT2 thông qua cờ --dir. Tuy nhiên, nếu làm như vậy, tất cả tệp trong thư mục đó sẽ được biên dịch lại, bất kể số lượng tệp đã thực sự thay đổi trước đó.Trong giai đoạn liên kết, là giai đoạn AAPT2 liên kết các tài nguyên đã biên dịch khác nhau thành một APK duy nhất, hãy hướng dẫn AAPT2 chuyển đổi tệp kê khai của ứng dụng và các tài nguyên đã biên dịch thành định dạng protobuf thông qua cờ --proto-format như bên dưới: aapt2 link --proto-format -o output.apk \ -I android_sdk/platforms/android_version/android.jar \ --manifest project_root/module_root/src/main/AndroidManifest.xml \ -R compiled_resources/*.flat \ --auto-add-overlay Lưu ý: Ngoài ra, khi chỉ định tài nguyên được biên dịch bằng cờ -R, bạn có thể chỉ định tệp văn bản có chứa đường dẫn tuyệt đối cho từng tài nguyên tài nguyên được biên dịch—trong đó mỗi đường dẫn được phân tách bằng một khoảng trắng. Bạn có thể chuyển tệp văn bản đó đến AAPT2 như sau:aapt2 link ... -R @compiled_resources.txt.Sau đó, bạn có thể trích xuất nội dung từ kết quả đầu ra của tệp APK, chẳng hạn như AndroidManifest.xml, resources.pb và các tệp tài nguyên khác của ứng dụng — hiện tại đang ở định dạng protobuf. Bạn cần các tệp này trong quá trình chuẩn bị các yêu cầu đầu vào cho bundletool để tạo gói ứng dụng, như mô tả trong phần sau. Đóng gói tài nguyên và mã được biên dịch sẵnTrước khi sử dụng bundletool để tạo gói ứng dụng, trước tiên bạn phải cung cấp các tệp ZIP, mỗi tệp chứa mã và tài nguyên đã biên dịch cho một mô-đun ứng dụng có sẵn. Nội dung và cách sắp xếp tệp ZIP trong từng mô-đun rất giống với định dạng Android App Bundle. Ví dụ: bạn nên tạo tệp base.zip cho mô-đun cơ sở của ứng dụng và sắp xếp nội dung của mô-đun này như sau:
Sau khi chuẩn bị tệp ZIP cho từng mô-đun của ứng dụng, bạn có thể chuyển các tệp đó đến bundletool để tạo gói ứng dụng, như được mô tả trong phần sau. Tạo gói ứng dụng bằng bundletoolĐể tạo gói ứng dụng, bạn hãy sử dụng lệnh bundletool build-bundle như trình bày dưới đây: bundletool build-bundle --modules=base.zip --output=mybundle.aab Lưu ý: Nếu bạn dự định phát hành gói ứng dụng này, bạn cần ký gói ứng dụng bằng cách sử dụng jarsigner. Bạn không thể sử dụng apksigner để ký gói ứng dụng của mình.Bảng sau đây mô tả chi tiết về các cờ cho lệnh build-bundle:
Tuỳ chỉnh cách tạo tệp APK theo chiều xuôi (downstream)Gói ứng dụng sẽ bao gồm một tệp BundleConfig.pb dùng để cung cấp siêu dữ liệu theo yêu cầu của cửa hàng ứng dụng, chẳng hạn như Google Play, khi tạo tệp APK từ gói đó. Mặc dù bundletool sẽ tạo tệp này cho bạn, nhưng bạn có thể định cấu hình một số thành phần của siêu dữ liệu trong tệp BundleConfig.json và chuyển tệp này vào lệnh bundletool build-bundle — sau đó bundletool sẽ chuyển đổi và sẽ hợp nhất tệp này với phiên bản protobuf chứa trong mỗi gói ứng dụng. Lưu ý: Để tìm hiểu thêm về cách JSON ánh xạ đến định dạng protobuf, hãy tham khảo JSON Map. Tuy nhiên, đây là chủ đề nâng cao hơn so với những gì cần đề cập ở trang này.Ví dụ: bạn có thể kiểm soát để bật hoặc tắt các danh mục trong tệp APK cấu hình. Sau đây là ví dụ về tệp BundleConfig.json dùng để vô hiệu hoá các APK cấu hình, trong đó mỗi APK hướng đến một ngôn ngữ khác nhau (tức là tài nguyên cho tất cả ngôn ngữ được chứa trong APK cơ sở hoặc chức năng tương ứng): { "optimizations": { "splitsConfig": { "splitDimension": [{ "value": "LANGUAGE", "negate": true }] } } }Trong tệp BundleConfig.json, bạn cũng có thể chỉ định loại tệp nào không cần nén khi đóng gói APK thông qua các mẫu glob như sau: { "compression": { "uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"] } }Lưu ý rằng theo mặc định, bundletool không nén thư viện gốc (trên Android 6.0 trở lên) và bảng tài nguyên (resources.arsc) của ứng dụng. Để xem mô tả đầy đủ về những nội dung bạn có thể định cấu hình trong BundleConfig.json, hãy kiểm tra tệp config.protobundletool, được viết bằng cú pháp Proto3. Triển khai ứng dụng bằng một gói ứng dụngNếu bạn đã tạo và ký gói ứng dụng, hãy sử dụng bundletool để tạo APK và triển khai các APK đó trên một thiết bị. Ký ứng dụng bằng dòng lệnhBạn không cần Android Studio để ký ứng dụng. Thay vào đó, bạn có thể ký ứng dụng bằng dòng lệnh, sử dụng apksigner cho APK hoặc jarsigner cho gói ứng dụng hoặc định cấu hình Gradle để ký ứng dụng trong quá trình xây dựng. Dù với cách nào, trước hết bạn cần tạo khoá riêng tư thông qua keytool, như minh hoạ bên dưới: keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-aliasVí dụ trên sẽ nhắc bạn mật khẩu cho kho khoá và khoá, cũng như các trường "Distinguished Name" (Tên phân biệt) cho khoá của bạn. Đoạn lệnh này sau đó sẽ tạo kho khoá dưới dạng một tệp có tên là my-release-key.jks, lưu tệp đó trong thư mục hiện tại (bạn có thể chuyển tệp này đến bất cứ đâu). Kho khoá này chứa một khoá duy nhất có hiệu lực trong 10.000 ngày. Bây giờ, bạn có thể tự ký APK hoặc gói ứng dụng hoặc định cấu hình Gradle để ký ứng dụng trong quá trình tạo bản dựng, như mô tả trong các phần bên dưới. Ký ứng dụng theo cách thủ công bằng dòng lệnhNếu muốn ký một gói ứng dụng bằng dòng lệnh, bạn có thể sử dụng jarsigner. Nếu muốn ký APK, bạn cần sử dụng zipalign và apksigner như mô tả bên dưới.
Định cấu hình Gradle để ký ứng dụngMở tệp build.gradle cấp mô-đun và thêm khối signingConfigs {} chứa các mục nhập cho storeFile, storePassword, keyAlias và keyPassword. Sau đó chuyển đối tượng đó đến thuộc tính signingConfig trong loại bản dựng. Ví dụ:
Bây giờ, khi tạo ứng dụng bằng cách gọi đến một tác vụ Gradle, Gradle sẽ giúp bạn ký ứng dụng (và chạy zipalign). Ngoài ra, vì bạn đã định cấu hình bản phát hành bằng ký khoá, tác vụ "install" (cài đặt) sẽ có sẵn cho loại bản dựng đó. Vì vậy, bạn có thể tạo, căn chỉnh, ký ứng dụng và cài đặt APK phát hành trên một trình mô phỏng hoặc thiết bị bằng tác vụ installRelease. Một ứng dụng được ký bằng khoá riêng tư đã sẵn sàng để phân phối, nhưng trước hết bạn nên tìm hiểu thêm về cách phát hành ứng dụng và xem lại danh sách kiểm tra trước khi phát hành trên Google Play. |