20241022

Golang Fyne를 이용한 APK 만들기

 Golang Fyne를 이용한 APK 만들기

1. Install Android SDK

2. Install Android NDK

3. golang 다운로드 및 설치

4.Fyne 사용

5. APK 파일 만들기.


1. Android SDK 설치.

    sudo apt install android-sdk

2. 웹브라우져에서 Android NDK 검색 다운로드

    - ( 테스트할 스마트폰의 안드로이드 버젼과 호환되는 올드 버젼 추천)

       테스트 스마트폰이 Android 12 이면, 이와 호환되는 최신 NDK 버전을 사용하는 것이 좋습니다.         Android NDK r23 이상은 Android 12(API 레벨 31)를 완벽히 지원함.

       루트 디렉토리에서: find . -name "build.gradle"

   다운받은 NDK를 계정 폴더에 압축풀어서 이동시켜 두고

   sudo apt update

   sudo apt install unzip

   unzip android-ndk-r27-linux.zip

   mv android-ndk-r27 ~/android-ndk-r27 

   nano ~/.bashrc 파일 열어서

   

   export ANDROID_NDK_HOME=~/android-ndk-r27/

   환경설정 추가하고, 저장하고 나오기

   

   source ~/.bashrc

   환경설정을 즉시 다시 적용함.

   

3. golang 다운로드 및 설치

   1. golang linux 설치 방법

      수동설치방법: golang 웹싸이트에서 파일을 다운받고, 터미널에서 다운받은 폴더로 이동합니다.

      1-1./usr/local/go 폴더가 있는 경우- 먼저 폴더를 삭제합니다.

      1-2.다운로드한 파일을 압축을 풉니다.

      sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.2.linux-amd64.tar.gz


      1-3.환경 변수 에 /usr/local/go/bin 을 추가합니다.

      -자신의 계정 폴더로 이동후 - nano .profile  실행후, 마지막 줄에 아래 패스를 추가.

       export PATH=$PATH:/usr/local/go/bin

      - 파일을 저장하고 나온후, source ~/.profile 로 다시 실행

      - SHELL 새로고침하기: exec $SHELL 

      1-4. golang 설치된거 확인: go version


4.비주얼스튜디오 코드 설치 실행

  Visual studio Code를 홈페이지에서 다운받고(.deb)

  다운받은 폴더로 이동합니다.

  sudo dpkg -i code_1.94.2-1728494015_amd64.deb

  비주얼스튜디오코드를 실행(터미널에서: code)하고, 


  go Extensions(확장)을 설치(ctrl+shift+x) 설치: 검색 go

  - Rich Go language support.. Go Team at Google 설치)


5.Fyne 사용

   1. 이전 버전을 먼저 삭제합니다.

      이전 버젼을 삭제하는 명령: go clean -modcache


   2.패키지 관리자를 사용하여 Go, gcc 및 그래픽 라이브러리 헤더 파일을 설치해야 합니다.

     sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev


   3.프로젝트 폴더 만들고, 모듈을 먼저 생성: go mod init 이름

      mkdir gostudy

      cd gostudy

      go mod init gostudy

    

   4.Fyne 모듈과 헬퍼 도구를 다운로드[프로젝트 폴더 안에서]

     go get fyne.io/fyne/v2@latest

     go install fyne.io/fyne/v2/cmd/fyne@latest


     커맨드에서 fyne 만 입력해서 환경설정이 적용 안되어 있으면 아래처럼 입력

     nano ~/.bashrc 에 go 위치 추가

     export PATH=$PATH:~/go/bin/ 저장하고

     source ~/.bashrc

     fyne 명령 실행시, 여러 명령 및 설명 보임 

     

   5.비주얼스튜디오 코드에서, 프로그래밍 (main.go)파일 만들고

-------------------------------------------------

package main


import (

    "fyne.io/fyne/v2/app"

    "fyne.io/fyne/v2/container"

    "fyne.io/fyne/v2/widget"

)


func main() {

    a := app.New()                               //새로운 Fyne 애플리케이션을 생성합니다.

    w := a.NewWindow("Hello, Fyne!")             //새로운 창을 생성합니다.

    hello := widget.NewLabel("Hello from Fyne!") //"Hello from Fyne!"이라는 라벨 위젯을 생성합니다.

    w.SetContent(container.NewCenter(hello))     //생성된 라벨 위젯을 창의 가운데에 배치합니다.

    w.ShowAndRun()                               //창을 화면에 표시하고 애플리케이션을 실행합니다.

}

-------------------------------------------------

   6. go.mod파일 정리 정돈함. 불필요한 의존성 제거 및 최신버젼 업데이트

     go mod tidy 실행


   7.go 프로그램 실행

     go run 파일이름.go

     

6. APK 파일 만들기.

   아이콘 파일(대문자로 시작 Icon.png) 하나 만들고, 프로젝트 폴더에 두고

   fyne package -os android -appID com.example.이름

   fyne package -os android -icon Icon.png -appID com.example.myapp

   com.example.myapp - Android 플랫폼의 다른 앱과 충돌을 피하기 위해 고유한지 확인

   도메인 반대방향 형식의 고유한 이름이나 회사이름으로 생성함.

   끝에 이름과 상관없는, 프로젝트폴더이름으로 apk가 생성됨.

   위의 글짜 몇개 출력용 apk 파일 크기가: 83.7mb 입니다. 

   실행 속도는 매우 빠르지만, 용량이 매우 크네요.


7. APK 서명 관련[임시 기록]

APK생성시 서명 절차(프로젝트 폴더 이름이 gostudy1,파일이름이 gostudy1.apk 일경우)


서명 절차


일반적으로 안드로이드 스튜디오와 같은 개발 환경을 사용하여 APK를 생성할 때 서명 절차가 자동화되어 있습니다. 


[아래는 수동 설정 방법 관련]


APK 서명상태 확인: apksigner verify gostudy1_signed.apk

                  jarsigner -verify -verbose -certs gostudy1-aligned.apk


기존키 삭제: keytool -delete -alias my-key-alias -keystore /home/rio/gostudy/gostudy1/my-release-key.jks -storepass 비밀번호


키저장소 확인: keytool -list -v -keystore /home/rio/gostudy/gostudy1/my-release-key.jks -storepass 비밀번호


AndroidManifest.xml 검토: aapt dump badging gostudy1.apk


1. 키 저장소 생성

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000


키 저장소란? 앱 개발자의 디지털 서명 정보를 저장하는 파일입니다.

my-release-key.keystore: 생성할 키 저장소 파일 이름

alias_name: 키 별칭 (예: gostudy1)

keyalg: 키 알고리즘 (RSA 권장)

keysize: 키 크기 (2048비트 권장)

validity: 키 유효 기간 (일)

명령어 실행 시 입력해야 할 정보:

비밀번호: 키 저장소와 개인 키에 대한 비밀번호를 설정합니다.


조직 정보: 회사 이름, 도시, 국가 등

고유 이름(DN) 항목

CN (Common Name) : 일반적으로 전통이나 서버의 이름.

OU(Organizational Unit) : 조직의 부서 이름.

O(조직) : 회사 또는 조직의 이름.

L (Locality) : 도시 이름.

ST (주 또는 도) : 주 또는 지역 이름.

C (국가) : 두 자리 국가 코드 (예: 대한민국은 KR)


2.APK 파일 빌드(생성): gostudy1 는 프로젝트 폴더이름이며,생성될 APK 이름이 됨.

Fyne 빌드 (빌드된 APK는 unsigned.apk로 설정)

fyne package -os android -icon Icon.png -appID com.example.myapp

fyne package -os android -appID com.example.myapp -o $UNSIGNED_APK

fyne package -os android -appID com.example.gostudy1

com.example.myapp - Android 플랫폼의 다른 앱과 충돌을 피하기 위해 고유한지 확인

도메인 거꾸로 방식으로 고유하게끔 생성함.


3-1. APK 서명: 방법 1

jarsigner -verbose -keystore my-release-key.keystore -signedjar gostudy1_signed.apk gostudy1.apk alias_name


gostudy1_signed.apk: 서명된 APK 파일 이름

gostudy1.apk: 서명할 APK 파일

alias_name: 키 별칭

명령어 실행 시: 키 저장소 비밀번호와 개인 키 비밀번호를 입력합니다.


3-2 apksigner로 서명: 방법 2

apksigner sign --ks /home/rio/gostudy/gostudy1/my-release-key.jks --ks-pass pass:비밀번호 --key-pass pass:your_key_password --out signed-gostudy1.apk gostudy1.apk


apksignerAPK를 사용하여 도구를 서명하는 방법이 있습니다. apksignerAndroid SDK에 포함되어 인증 zipalign됩니다.


4. ZIPALIGN (선택)

zipalign -v 4 gostudy1_signed.apk gostudy1_aligned.apk


ZIPALIGN이란? APK 파일 내부의 데이터를 정렬하여 앱 성능을 향상시키는 도구입니다.