# 打包 Android APK 文件
###### tags: `Work`

[TOC]
# 優先條件
1. 下載 [Android Studio](https://developer.android.com/studio) 軟體
2. 下載對方給的 Android Code (可能是ZIP, GITLAB, etc)
# 一般正常專案打包
## 1. 檔案匯入到Android Studio
請選 **Open an Existing Project** 並選上你的專案資料夾。

備註: 打開後需要看右下方是否全部流程都跑好了再繼續。
## 2. Clean & Sync Gradle
在此需要讓專案先做個初步整理跟更新會比較好,避免有Cache類是問題。首先我們先Clean專案在做Sync。
### 1. Clean 專案
請找 **Build > Clean Project**

### 2. Sync Gradle
**File > Sync Project With Gradle Files**

備註: Gradle 檔案很多都是設定檔案及三方import/dependency/套件。
## 3. 選好專案的Variant
### Build Variant是什麼?
有些時候在開發上,我們可能會有不同專案在同一個專案底下。例如: 我們專案跟另一個專案只有一些小小參數改變或小變化,都會這樣做。這時會用專案Variant去選取你當下想用或看的專案。
### **1. 開啟方式Build Variant:**
如果在Android Studio的**左方**看不到Build Variant Window的話,請往**左下方**找一下的 Build Variant Tab開啟他。

### **2. 選取Build Variant:**
 > 主要專案
 > 專案的Library
首先需要找  主要專案,在他的右方會有Variant名稱,選好你要的就好了。
備註: 如果沒有特別分的話(代表只有debug跟release選項),那就選Debug即可。
## 打包
### Debug APK
**Build > Build Bundle/APK > Build APK**。

### Release APK
1. 先找 **Generate Signed Bundle/APK**,位子在 **Build > Generate Signed Bundle/APK**。
> [color=lightblue]
2. 選APK
>[color=lightblue]
3. 填寫需要的資料:
**Key Store Path:** 要找一個.keystore檔案 (如果專案裡面沒有的話,需要跟廠商要)
**Key store password, Key alias, Key Password:** 如果沒有一個檔案叫keystore.properties在資料夾的話,資訊就需要跟廠商要。
>[color=lightblue]
4. 選Debug/Release APK:
這裡可以多選,一次包很多個。選好後按Finish讓他慢慢跑。
>[color=lightblue]
5. 打開APK位子:
**打開方法1:**
打包好時,Android Studio 的右下方會顯示一個公告。 Title 為 **Generate Signed APK**。 如果打開下方指標,他可以直接幫你locate(定位)你的APK位子。所以按下locate就好。
**打開方法2:**
打開專案目錄 > app > build> outputs > apk 就可以找到你要的APK。
**備註:** 如果這次的專案有很多Variant會有Variant的目錄,以及在Variant裡會有Debug/Release目錄。
>[color=lightblue]
# 黑白打包
## 1. 檢查是否有Gradle 資料夾
黑白團隊不一定會有給,可是沒有Gradle資料夾跟檔案的話是無法Build的。
**需要檢查的資料夾如下:**

### 處理沒有Gradle資料夾的情況:
如果:
1. **會開Android專案**: 請自行開專案,並把新專案的**Gradle資料夾拷貝到*黑白的Android Root Project 底下***。
2. **不會開Android專案**: 請按照Android 官方的[创建 Android 项目Tutorial](https://developer.android.com/training/basics/firstapp/creating-project) 就可以創建新的專案,並把新專案的**Gradle資料夾拷貝到*黑白的Android Root Project 底下***。
## 2. 專案必續更改的幾個點:
### 2.1 允許讀取UTF-8
因為對方使用Mac電腦無遇到這問題,可是Windows需要做這更改。首先找 ***gradle.properties***,在做需要的更改。
**gradle.properties:**
1. **檔案位子:** heibai(projet root) > gradle.properties
>[color=lightblue]
2. **更改項目**
```java=
org.gradle.jvmargs=-Xmx2048m
//改成
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
```
### 2.2 DataBinding 更新
您可能會遇到databinding 相關Error如果要打包,因為初步原始碼已經要被淘汰了,所以先改成新的。 需要改的地方有**2個檔案**: **app/build.gradle** 及 **FootballLib/football/build.gradle**。
**build.gradle:**
```java=
dataBinding {
enabled = true
}
//改成
buildFeatures {
dataBinding true
}
```
## APK打包流程
如果真的以上的步驟都做好了,那就可以按照[一般正常專案打包](#一般正常專案打包)的步驟完成APK輸出。
# 如何用模擬機測試?
## 1. 先確認SDK Manager的Android SDK 版本有沒有下載?
### **SDK Manager在哪呢?**
1. 右上方有一個cube + down arrow,按下這時會直開Window 顯示Android SDK - SDK platform.
2. 勾選你要的 API level 再按右方的下載鍵,就可以了。

3. 這樣就可以按Apply 後 Ok 再退出此window。
**SDK Manager:**

**SDK Platform:**

## 2. 如何確認你現在有模擬機能用?
>[color=orange]
在上方可以看到 **Android icon + app** 這就代表這個專案是一個可以build看看的app專案。
沒有顯示此樣式的話,有可能:
(1) gradle folder 不在
(2) Setting 哪裡有誤
另外在 **Android icon + app** 右方就有一個 **Nexus 5X**,這就是我的模擬機(代表有模擬機可用),如果需要增加模擬機,請前往AVD Manager增加。
## 3. 如何build app在模擬機?
>[color=orange]
最右方的icon按下去就是可以build app了,偶爾長得像:
1. 上圖一樣(已經build時需要重新build)
2. 一個往右箭頭 (如果還沒build)
備註:提醒Build動作偶爾很慢請給他一點時間跑。