Cordova를 이용한 Web App 빌드 및 패키징

 

Cordova


Cordova(코르도바)는 아파치 재단에서 지원중인 하이브리드 앱을 위한 프레임워크라고 소개하고 있다. 즉, 이말은 하이브리드 앱을 만들기위한 프레임워크라는 말이다.

위 내용 생각을 정리해보면 Cordova는 웹 프로그래밍 기술(React, Vue, Javascript 등)을 이용해 개발한 프로그램을 빌드하여 앱으로 패키징/배포할수 있는 도구(프레임워크?)라고 할수 있을거 같다.

여기에서는 이미 작업된 Vue 프로젝트를 웹앱으로 배포 및 패키징하기 위한 방법을 설명하는 것에 초점이 맞춰져 있다.

1. nodejs가 설치 되어있다는 가정하에 아래의 명령을 입력하여 cordova 패키지를 설치한다.
npm install -g cordova

2. 또한 프로젝트가 vue로 개발되었다는 것을 가정하여 아래 명령어를 입력한다.
vue add crodova

그러면 아래와 같이 몇가지 입력을 통해 개발 환경이 세팅된다.

WARN : There are uncommitted changes in the current repository, it's recommended to commit or stash them first.
? Still proceed(y/n)
작업중인 내용이 있는지 경고하는 거로 그냥 y라고 하면 install을 진행한다.

Name of folder where cordova should be installed
크로도바 프로젝트를 위한 폴더를 하나 만드는데 현재 디렉토리 하단에 생성하는 디렉토리 명을 입력한다. 나는 그냥 cordova라고 입력했다.

ID of the app (com.vue.example.app)
ID를 만들라고 하는데 난 일단 com.프로젝트명.app으로 입력했다.

Name of the app (VueExampleAppName)
app 이름을 입력하라는데 난 그냥 프로젝트명을 입력했다.

Select Platforms: (Press <space> to select, <a> to toggle all, <i> to invert selection)
개발하고자 하는 플랫폼을 선택하면된다. 스페이스바를 통해 선택하고 엔터로 넘어가자
그러면 아래와 같이 인스톨을 실행한다. 


정상적으로 실행한 경우 아래와 비슷하게 보여질 것이다.


cordova라는 디렉토리가 생성되고 디렉토리 아래에 platforms를 살펴보면 내가 선택한 플랫폼이보인다. 


3. 현재의 프로젝트로 cordova 프로젝트로 빌드하기 위한 작업인것 같다. 아래의 명령어를 입력한다.
npm run cordova-prepare
그러면 뭔가 프로젝트를 빌드하기 시작하고 아래처럼 js, css등 빌드 결과물이 생성된다.

그리고 프로젝트의 package.json을 살펴보면 아래와 같은 build 스크립트 옵션이 추가된 것을 볼수 있다.


4. 여기에서 Windows PC 앱을 만들기 위해 아래의 명령어를 입력해보자.
npm run cordova-build-electron


빌드를 수행하고 성공적으로 끝나면 아래와 같은 메시지가 표시된다.


그리고 cordova > platforms > electron 디렉토리를 살펴보면 아래와 같이 build 폴더가 생성이 되고 그 아래에 XXXX.exe 실행파일이 만들어 진다. 그러면 성공이다. 이 파일을 파일관리자에서 실행해보면 install가 실행된다.


설치후 바탕화면에 아이콘이 생성되고 이 아이콘을 실행하면 우리의 웹 첫 화면이 표시될 것이다.


5. 지금 상태에서 안드로이드 앱을 만들기 위해 아래의 명령어를 입력해보자
npm run cordova-build-android
만약 빌드에 성공하고 platforms/android 아래에 build 디렉토리가 생겼고, xxxx.apk 파일이 생겼다면, "축하합니다." 당신의 컴퓨터에는 이미 android 개발 환경이 구축되어 있었고, 귀찮은 해당 과정을 스킵할수 있으니 말이다...^^

현재 과장에서는 아직 android 개발 환경이 설정되어 있지 않기때문에 아래와 같은 오류가 발생하는게 정상이다.


일단, 여기까지 잘 따라오셨다면 일단 거대한 산은 넘었다고 생각하시고, 나머지는 여유를 갖고 천천히 하시길 권장합니다..^^

Android 빌드 환경 설정은 

위와 같이 안드로이드 환경 설정을 완료했으면 아래와 같이 확인해보자, 만약 아래와 같이 확인했을때 undefined가 된다면 추가적인 환경 설정이 필요하다.

$ cordova run android
Checking Java JDK and Android SDK versions
ANDROID_SDK_ROOT=undefined (recommended setting)
ANDROID_HOME=C:\Users\sentr\AppData\Local\Android\Sdk (DEPRECATED)
Using Android SDK: C:\Users\sentr\AppData\Local\Android\Sdk
Could not find an installed version of Gradle either in Android Studio,
or on your system to install the gradle wrapper. Please include gradle
in your path, or install Android Studio


오류 해결 과정(역시나 삽질의 시작 ㅠ.,ㅜ)

위와 같은 오류 해결 방법에 대한 자세한 내용은 여기를(https://nurioweb.blogspot.com/2021/10/cordova-android-sdkgradle.html) 참고하시기 바랍니다.

오류가 해결되었다면 다시 crodova run android 명령을 을 실행해보자.


와우! 뭔가 되는 좋은 느낌이다. 
일단 성공이란 단어도 나온다. 
이제 기다리기만 하면된다. ㅎㅎㅎ

헐~~~대박! 역시나 쉽게 가는법이 없다. 
저 붉은색 단어의 실패라는 문구가 눈에 확 들어온다. 

또 삽질의 시작이다... ㅠ,ㅜ

대충 에러 내용을 보아 하니 SDK 31버전이 뭔가 이상한거 같다. 일단 31의 최신 버전을 지원해야 할 이유가 없으니 위의 삭제를 해보기로 한다. 

젠장 이게 아니었다. ㅠ,.ㅜ? 
역시나 쉽게 되는법이 없다..ㅋㅋㅋ
역시 우리에겐 구글링이 답이다..ㅎㅎ

무작정 아래 내용으로 일단 찾아본다.

Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'. > Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.

아래와 같은 내용을 빠르게 찾아본다. 요약하자면 SDK가 설치된 폴더를 뒤져서 해당 디렉토리에 있는 d8.bat와 lib\d8.jar을 아래와 같이 dx.bat, dx.jar로 변경하라고 한다.

For Windows

  1. go to the location

     "C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0"
    
  2. find a file named d8.bat. This is a Windows batch file.

  3. rename d8.bat to dx.bat.

  4. in the folder lib ("C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0\lib")

  5. rename d8.jar to dx.jar


와우! 삽질하지 않고 쉽게 해결되었다. 다행이다. 역시나 요즘엔 구글링이 답이다...ㅎㅎㅎ


드디어 성공이다. 내가 그토록 보고 싶어하고, 여러분들이 그토록 보고싶어하는 대망의 엔딩이다. ㅎㅎㅎ


\cordova\platforms\android\app\build\outputs\apk\debug\app-debug.apk

보기 좋은 초록색 글씨의 SUCCESSFUL 글자와 VSCODE에서 android/build 디렉토리를 살펴보면 빌드 결과 파일인 xxx.apk가 생성되었음을 알수 있다.


참고 사이트

댓글

이 블로그의 인기 게시물

[JAVA] 변수란? 변수타입?

[JAVA] 문자셋(Charset)

[JAVA] 문자열 비교[== vs equals()]의 차이