# Publish cho Android

## **Bước 1: Tạo một keystore**

Nếu đã có keystore thì bỏ qua bước này và thực hiện bước tiếp theo. Nếu không thì thực hiện đoạn lệnh bên dưới với **\<path>** là đường dẫn tạo file key:

```
keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key -storetype JKS
```

{% hint style="info" %}
Keytool có thể chưa được set vào path. Chạy lệnh flutter doctor -v và cd vào đường dẫn ở sau "Java binary at:".

Macbook sài chip Apple (M1) JDK sẽ không có sẵn. Cần tải thêm [**tại đây**](https://www.azul.com/downloads/?os=macos\&architecture=arm-64-bit\&package=jdk).
{% endhint %}

## **Bước 2: Tham chiếu keystore vào trong ứng dụng**

Tạo file có tên **key.properties** trong thư mục **android** trong đó password, keyAlias là những thông tin khi tạo key.

```java
storePassword=<password>
keyPassword=<password>
keyAlias=key
storeFile=<path>/key.jks
```

## **Bước 3: Cấu hình gradle**

Thay đổi file `<dir>/android/app/build.gradle` tại các vị trí:

Thay đoạn `android {` bởi thông tin keystore

```java
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
   keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
```

Thay đoạn

```java
 buildTypes {
       release {
           // TODO: Add your own signing config for the release build.
           // Signing with the debug keys for now,
           // so `flutter run --release` works.
           signingConfig signingConfigs.debug
       }
   }  
```

Bởi đoạn &#x20;

```java
 signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile file(keystoreProperties['storeFile'])
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }
```

## **Bước 4: Tạo file release**

Chạy lệnh bên dưới để release apk tại thư mục `build\app\outputs\apk\release`&#x20;

```java
flutter build apk
```

Hoặc chạy lệnh bên dưới để release file dưới dạng appbundle tại thư mục `build\app\outputs\bundle\release`

```java
flutter build appbundle
```

{% hint style="info" %}
Định dạng appbundle (\*.aab) được khuyến khích khi đăng trên Google Store vì sẽ được Google tối ưu dung lượng của ứng dụng. Đối với định dạng apk thì dung lượng sẽ không được tối ưu.
{% endhint %}

Một số trường hợp cần lấy SHA1/SHA256 Key cho 2 chế độ debug và relase. Thì có thể chạy lệnh như bên dưới:

* Debug key

```java
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
```

* Release Key

```java
keytool -list -v -keystore {keystore_name} -alias {alias_name}
```

## **Bước 5: Publish lên CH Play**

Truy cập vào [**Google Console**](https://play.google.com/apps/publish/) để tạo một Ứng dụng mới hoặc update ứng dụng cũ bằng file dạng appbundle (\*.aab) hoặc file apk (\*.apk) .

{% hint style="info" %}
App-Signing

*java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=output.zip --encryptionkey=xxx --include-cert*
{% endhint %}
