Android - kuimoani/defold GitHub Wiki

Android development

이 λ¬Έμ„œλŠ” Android μž₯μΉ˜μ—μ„œ Defold μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

Android κ°œλ°œμ€ 컨텐츠λ₯Ό 자유둭게 μž₯μΉ˜μ— μ—…λ‘œλ“œ ν•˜κ³  μ•‘μ„ΈμŠ€ ν•  수 μžˆλ‹€λŠ” μ μ—μ„œ iOS 개발과 λ‹€λ₯΄λ©° μ•„μ£Ό μ‰½κ²Œ κ²Œμž„μ˜ 버전을 λΉŒλ“œν•˜κ³  Android μž₯μΉ˜μ— 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ™€μ΄νŒŒμ΄λ₯Ό 톡해 μž₯μΉ˜μ—μ„œ 반볡적인 κ°œλ°œμ„ μœ„ν•œ 개발용 μ—”μ§„(development engine)도 μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Android and Google Play signing process

AndroidλŠ” 앱을 μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ λ””μ§€ν„Έ μ„œλͺ…을 ν•„μš”λ‘œ ν•©λ‹ˆλ‹€. Appleμ—μ„œ λͺ¨λ“  μΈμ¦μ„œλ₯Ό λ°œν–‰ν•˜λŠ” iOSμ™€λŠ” 달리, AndroidλŠ” 자체 μ„œλͺ…λœ 앱을 ν—ˆμš©ν•˜λ―€λ‘œ 앱을 μ„œλͺ…ν•˜λŠ”λ° ν•„μš”ν•œ ν‚€λ‚˜ μΈμ¦μ„œλ₯Ό 자유둭게 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

μΈμ¦μ„œλ‚˜ ν‚€λ₯Ό μƒμ„±ν•˜λŠ” 과정은 λ³΅μž‘ν•΄ 보일 수 μžˆμ§€λ§Œ, κ°œλ°œλ‹¨κ³„μ—μ„œλŠ” Defoldκ°€ 이 과정을 μ™„μ „νžˆ μžλ™ν™” ν•©λ‹ˆλ‹€. μ—λ””ν„°μ—μ„œ Android μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€μ„ λ§Œλ“€ λ•Œ, 당신은 νŠΉμ • μΈμ¦μ„œμ™€ ν‚€λ₯Ό μ œκ³΅ν•  수 μžˆμ§€λ§Œ, μ œκ³΅ν•˜μ§€ μ•Šλ”λΌλ„ Defoldκ°€ λ¬΄μž‘μœ„λ‘œ μΈμ¦μ„œμ™€ ν‚€λ₯Ό μƒμ„±ν•˜κ³  .apk(Android Application Package) νŒŒμΌμ„ μ„œλͺ…ν•©λ‹ˆλ‹€.

Google Play에 앱을 λ¦΄λ¦¬μ¦ˆν•  λ•Œκ°€ 되면 앱을 μ„œλͺ…ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μ‹€μ œ μΈμ¦μ„œμ™€ ν‚€λ₯Ό μƒμ„±ν•΄μ•Όλ§Œ ν•©λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” 이 μ•±μ˜ 버전을 λ°°ν¬ν•˜κ³  μ—…λ°μ΄νŠΈ ν•˜λ € ν•  λ•Œ, μ—‘λ°μ΄νŠΈ 된 .apk 파일과 ν˜„μž¬ 버전이 λ™μΌν•œ μ„œλͺ…μœΌλ‘œ λ˜μ–΄μžˆμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ§Œμ•½ μ„œλ‘œ λ‹€λ₯Έ private key둜 μ„œλͺ…ν•˜λ©΄, Google PlayλŠ” .apk μ—…λ°μ΄νŠΈλ₯Ό κ±°λΆ€(reject)ν•˜κ²Œ 되고 당신은 이 κ²Œμž„μ„ μ™„μ „νžˆ μƒˆλ‘œμš΄ μ•±μœΌλ‘œ λ‹€μ‹œ 배포해야 ν•©λ‹ˆλ‹€.

더 λ§Žμ€ μ •λ³΄λŠ” Google Play developer console μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λ§Œμ˜ μΈμ¦μ„œμ™€ ν‚€λ₯Ό μƒμ„±ν•˜λŠ” 방법은 μ•„λž˜ 정보λ₯Ό μ°Έκ³  λ°”λžλ‹ˆλ‹€.

Android Debug Bridge

adb λͺ…λ Ή 쀄 λ„κ΅¬λŠ” Android μž₯μΉ˜μ™€ μƒν˜Έμž‘μš©ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” λ‹€μž¬λ‹€λŠ₯ν•œ ν”„λ‘œκ·Έλž¨μ΄λ©° μ‚¬μš©ν•˜κΈ°λ„ μ‰½μŠ΅λ‹ˆλ‹€. Mac, Linux, Windows용으둜 Android SDK package μ—μ„œ adbλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

http://developer.android.com/sdk/index.html μ—μ„œ Android SDK λ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ„Έμš”. /platform-tools/ κ²½λ‘œμ—μ„œ adb 도ꡬλ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” ν”Œλž«νΌ 별 νŒ¨ν‚€μ§€λŠ” 각각의 νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λ₯Ό ν†΅ν•΄μ„œ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

On Ubuntu Linux:

$ sudo apt-get install android-tools-adb

On Fedora 18/19:

$ sudo yum install android-tools

On Mac OS X (Homebrew)

$ brew install android-platform-tools

adb둜 USBλ₯Ό 톡해 컴퓨터와 Android μž₯μΉ˜κ°€ μ—°κ²°λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ μ•„λž˜ μ»€λ§¨λ“œλ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€.

$ adb devices
List of devices attached
31002535c90ef000    device

μž₯치(device)κ°€ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμœΌλ©΄, Androidμ—μ„œ USB 디버깅(USB debugging) 이 ν™œμ„±ν™” λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ„Έμš”. μ„€μ •(Settings) μ—μ„œ 개발자 μ˜΅μ…˜(Developer options) (λ˜λŠ” Development)μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

Enable USB debugging

development dmengine μ„€μΉ˜ν•˜κ³  μ‹€ν–‰ν•˜κΈ°

Defold μ—”μ§„μ˜ stand-alone 버전은 μ€€λΉ„λœ .apk νŒŒμΌμ„ λ¬΄μ„ μœΌλ‘œ μž₯μΉ˜μ— μ„€μΉ˜ν•˜κ³  반볡적인 κ°œλ°œμ„ κ°€λŠ₯ν•˜κ²Œ ν•΄ μ€λ‹ˆλ‹€.

  • http://d.defold.com에 λ°©λ¬Έν•΄μ„œ Defold downloads ν•­λͺ©μ„ μ°ΎμŠ΅λ‹ˆλ‹€.
  • λ‹€μš΄λ‘œλ“œν•  버전을 ν΄λ¦­ν•΄μ„œ μ‚¬μš© κ°€λŠ₯ν•œ μ—”μ§„ λΉŒλ“œ λͺ©λ‘μ„ νŽΌμΉ©λ‹ˆλ‹€.
  • Android ν”Œλž«νΌ(Armv7)의 디버그 ν™œμ„± λΉŒλ“œ(debug enabled build)λ₯Ό μœ„ν•΄ "engine/armv7-android/dmengine.apk"λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

Download dmengine

이 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν•œ ν›„, .apkκ°€ μžˆλŠ” μœ„μΉ˜μ—μ„œ μ•„λž˜μ˜ adb λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

$ adb install dmengine.apk
4445 KB/s (8706017 bytes in 1.912s)
	pkg: /data/local/tmp/dmengine.apk
Success

이제 개발용 "dmengine" 앱이 기기에 μ„€μΉ˜ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

dmengine on the device

Launching the game

Android μž₯μΉ˜μ—μ„œ κ²Œμž„μ„ μ‹€ν–‰ν•˜λ €λ©΄, dmengine μ•±κ³Ό 에디터가 λ™μΌν•œ μ™€μ΄νŒŒμ΄ λ„€νŠΈμ›Œν¬μ— μ—°κ²°λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  1. 에디터가 싀행쀑인지 ν™•μΈν•©λ‹ˆλ‹€.
  2. Androidμ—μ„œ "dmengine" 앱을 μ‹€ν–‰ν•©λ‹ˆλ‹€.
  3. μ—λ””ν„°μ˜ Project > Targets μ—μ„œ λ‹Ήμ‹ μ˜ κΈ°κΈ°λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  4. Project > Build And Launchλ₯Ό μ„ νƒν•΄μ„œ κ²Œμž„μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€. κ²Œμž„ 컨텐츠가 λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μž₯치둜 슀트림 λ˜λ―€λ‘œ κ²Œμž„μ΄ μ‹œμž‘λ˜λŠ”λ° μ‹œκ°„μ΄ 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€.

κ²Œμž„μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ, ν‰μ†Œμ²˜λŸΌ ν•« λ¦¬λ‘œλ“œμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Android μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€ λ§Œλ“€κΈ°

μ—λ””ν„°λŠ” κ²Œμž„μ„ μœ„ν•œ standalone μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€μ„ μ‰½κ²Œ λ§Œλ“€ 수 있게 ν•΄ μ€λ‹ˆλ‹€. Project > Bundle…​ > Android Application…​ 메뉴λ₯Ό 선택해 λ³΄μ„Έμš”.

Signing Android bundle

μΈμ¦μ„œμ™€ λΉ„κ³΅κ°œ ν‚€(Private Key)λ₯Ό μ„ νƒν•˜κ³  Package λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μ»΄ν“¨ν„°μ—μ„œ λ²ˆλ“€μ΄ 생성될 μœ„μΉ˜λ₯Ό μ§€μ •ν•˜λΌλŠ” 창이 λœΉλ‹ˆλ‹€.

Android Application Package file

μ—λ””ν„°λŠ” Android μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€μΈ .apk νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€. 이 νŒŒμΌμ€ adb 도ꡬλ₯Ό μ‚¬μš©ν•΄ 기기둜 λ³΅μ‚¬ν•˜κ±°λ‚˜ Google Play developer console 을 ν†΅ν•΄μ„œ Google Play에도 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€. "game.project" ν”„λ‘œμ νŠΈ μ„€μ • νŒŒμΌμ—μ„œ 버전 μ½”λ“œλ‚˜ μ•±μ—μ„œ μ‚¬μš©ν•  μ•„μ΄μ½˜ 등을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€ λ””λ²„κΉ…ν•˜κΈ°

μ—”μ§„μ˜ 디버그 λͺ¨λ“œ 버전(λ²ˆλ“€ μƒμ„±μ‹œμ— "Release mode"λ₯Ό 체크 ν•΄μ œ ν–ˆμ„ 경우)으둜 λΉŒλ“œλœ λ²ˆλ“€μ€ λͺ¨λ“  μ½˜μ†” 좜λ ₯(console output)을 Android μ‹œμŠ€ν…œ 둜그둜 λ³΄λƒ…λ‹ˆλ‹€. 이 λ‘œκ·ΈλŠ” adb 도ꡬ에 "logcat" λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ μ•‘μ„ΈμŠ€ ν•  수 있으며 νƒœκ·Έ("-s [tagname]")λ₯Ό μ‚¬μš©ν•΄μ„œ 좜λ ₯을 필터링 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

$ adb logcat -s "defold"
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
I/defold  ( 6210): INFO:DLIB: SSDP started (ssdp://192.168.0.97:58089, http://0.0.0.0:38637)
I/defold  ( 6210): INFO:ENGINE: Defold Engine 1.2.50 (8d1b912)
I/defold  ( 6210): INFO:ENGINE: Loading data from:
I/defold  ( 6210): INFO:ENGINE: Initialised sound device 'default'
I/defold  ( 6210):
D/defold  ( 6210): DEBUG:SCRIPT: Hello there, log!
...

μΈμ¦μ„œμ™€ ν‚€ μƒμ„±ν•˜κΈ°

pem 포멧의 μΈμ¦μ„œμ™€ pk8 포멧의 ν‚€λ₯Ό 생성해야 ν•©λ‹ˆλ‹€. μ΄λŠ” openssl 도ꡬλ₯Ό μ‚¬μš©ν•΄ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

$ openssl genrsa -out key.pem 1024
$ openssl req -new -key key.pem -out request.pem
$ openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
$ openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

μ΄λ ‡κ²Œ ν•΄μ„œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€μ„ μ„œλͺ…ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” "certificate.pem" 및 "key.pk8" 파일이 μƒμ„±λ©λ‹ˆλ‹€.

Signing Android bundle

μΈμ¦μ„œμ™€ ν‚€κ°€ μ•ˆμ „ν•˜κ²Œ μ €μž₯λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. λ§Œμ•½ 이 νŒŒμΌλ“€μ„ μžƒμ–΄λ²„λ¦¬λ©΄ Google Play에 .apk μ—…λ°μ΄νŠΈ λ²„μ „μ˜ νŒŒμΌμ„ λ‹€μ‹  μ—…λ‘œλ“œ ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€.

Troubleshooting

μž₯μΉ˜κ°€ Targets 메뉴에 λ‚˜νƒ€λ‚˜μ§€ μ•Šμ„ 경우

μž₯μΉ˜μ™€ 컴퓨터가 λ™μΌν•œ μ™€μ΄νŒŒμ΄ λ„€νŠΈμ›Œν¬μ— μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. λ˜ν•œ "dmengine" 앱이 에디터와 λ™μΌν•œ 버전인지도 ν™•μΈν•©λ‹ˆλ‹€. λ§Œμ•½ 에디터가 μ—…κ·Έλ ˆμ΄λ“œ λ˜μ—ˆλ‹€λ©΄, "dmengine.apk"도 μƒˆλ‘œ λ‹€μš΄λ‘œλ“œν•΄μ„œ μž₯μΉ˜μ— μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ„€μΉ˜μ‹œ "Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]" 였λ₯˜κ°€ λ°œμƒν•  경우

AndroidλŠ” μƒˆ μΈμ¦μ„œλ‘œ 앱을 μ„€μΉ˜ν•˜λ €λŠ” 것을 κ°μ§€ν•©λ‹ˆλ‹€. λ””λ²„κ·Έμš© λΉŒλ“œλ‘œ λ²ˆλ“€μ„ 생성할 λ•Œ, 각 λΉŒλ“œλŠ” μž„μ‹œ μΈμ¦μ„œλ‘œ μ„œλͺ…λ©λ‹ˆλ‹€. μƒˆ 버전을 μ„€μΉ˜ν•˜κΈ° 전에 κΈ°μ‘΄ 앱을 제거 ν•˜μ‹­μ‹œμ˜€.

$ adb uninstall com.defold.examples
Success
$ adb install Defold\ examples.apk
4826 KB/s (18774344 bytes in 3.798s)
	pkg: /data/local/tmp/Defold examples.apk
Success
⚠️ **GitHub.com Fallback** ⚠️