Android 앱 개발을 위한 팁: 배운 교훈

게시 됨: 2022-03-11

안녕! 저는 Ivan이고 꽤 오랫동안 Android 앱 개발자였습니다. 또는 그렇게 보인다. 그 당시(2009년에 대해 이야기하고 있음) Android는 유아기에 불과했고 그 이후 로 Little Green Man이 성장하는 것을 지켜봤습니다. 얼마 전에 Android가 저를 능가할 수 있었습니다.

오늘날 Android는 수만 대의 다양한 휴대폰과 태블릿에만 있는 것이 아닙니다. 그것은 당신의 손목에, 거실에, 차에 있고 우리가 무생물에 IP 주소를 할당하기 시작하자마자 우리 주변의 거의 모든 곳에 있게 될 것입니다. 숙련된 Android 개발자도 다룰 수 있는 근거가 많습니다!

또한 Amazon AppStore 또는 중국과 같이 일반적으로 관심이 없는 시장을 제외하고 Google Play에만 백만 개가 넘는 앱이 있습니다. 매년 수십억 달러의 수익을 창출하는 수많은 모바일 앱 개발 회사를 잊지 마십시오.

그렇다면 독립 개발자는 어떻게 큰 플레이어가 있는 이 거대한 시장에서 성공적인 앱을 만들 수 있습니까? 나는 잘 모르겠어, 나는 성공적인 앱을 만들지 않았다! 하지만, 나는 귀여운 하나를 만들었고, 내 이야기를 당신과 공유하고 싶습니다.

레슨 1: 점 연결하기

성공(보통)은 하루 아침에 이루어지지 않으며 이것이 저의 첫 번째 앱이 아닙니다. 30,000명이 넘는 사용자가 400만 명이 이해할 수 없는 언어로 사용하는 마케도니아 정교회 의 주말 개발 히트작 부터 언론 보도가 많은 앱 TweetsPie 와 같은 성공적인 실패에 이르기까지 다양한 것들이 있습니다. 600명이 넘는 활성 사용자의 끔찍한 사용자 기반. 거기에 많은 교훈!

이 앱이 "사용자라는 애매한 생물"의 마음을 조금 더 잘 이해하는 데 도움이 되었지만 저에게 영감을 준 것은 2시간짜리 프로젝트였습니다. 원래 저를 백만장자로 만들기 위해 개발되었지만 Google이 1달러에서 30센트를 가져가면서 1,428,571명의 사용자가 앱을 구입하자 The Dollar 앱 은 제 판매자 계정을 테스트하기 위해 만들어졌습니다.

몇 년 후 행복한 엄마로부터 내 앱이 아이를 안아줄 때마다 아이가 미소를 지으며 보낸 이후로 이것이 그녀가 쓴 돈 중 최고라는 이메일을 받게 될 줄은 몰랐습니다.

초보자를 위한 Android 앱 개발은 효율적으로 확장할 때 간단하고 재미있을 수 있습니다.

그리고 그렇게 아이디어가 탄생했습니다! 포옹에 대한 인간의 근본적인 욕구를 이용하고 그것을 아름답게 만들지 않겠습니까? 특정 청중을 위해 인터랙티브하고 도전적이며 재미있게 사용하고 공유할 수 있도록 만드십시오.

강의 2: Android 마켓 이해하기

위에서 언급한 모든 것들이 라이브 월페이퍼 앱에 추가되었습니다. 기본은 추측하기 어렵지 않습니다. Android는 iOS보다 시장 점유율이 더 높지만 iOS 사용자는 더 많이 구매합니다. 메시징 앱은 매우 인기가 있지만 프리미엄 게임이 수익을 가장 많이 차지합니다. 중국, 인도, 브라질, 러시아는 신흥 시장이지만 지출 습관이 부족합니다. 자세한 정보는 App Annie Index를 참조하세요.

그렇다면 라이브 월페이퍼 앱은 어떻게 여기에 적합할까요? 우선, 라이브 월페이퍼 는 Android이기 때문에 대부분의 플랫폼을 제거합니다. 둘째, 이 기능은 Android 2.1에 추가되었으므로 대규모 커뮤니티와 꽤 많은 아름다운 예가 있습니다. 가장 주목할만한 것은 Paperland와 Roman Nurik의 오픈 소스 Muzei이며, 아마도 Android 개발을 위한 최고의 참조 지점일 것입니다.

라이브 월페이퍼는 많이 있지만 대부분은 경치/날씨 범주에 속하며 귀여움 과부하 범주에 속하는 것은 거의 없습니다. 이것은 완전히 다른 이유로 잠금을 해제했음에도 불구하고 휴대전화를 잠금 해제할 때마다 미소를 지을 수 있도록 변경하고 제공하고자 하는 것입니다. 밤에 잠들기 전이나 아침에 알람을 끌 때 안아줄 귀여운 작은 기쁨을 선물했습니다. 더 나아가 개인화하고 사용자화할 수 있습니다.

더 이상 고민하지 않고 기술적 세부 사항으로 들어가기 전에 자랑스럽게 소개합니다. Ooshies - 라이브 배경 화면

Ooshies는 내 Android 앱의 이름입니다. 성공하지 못했을 수도 있지만 초보자 Android 개발자를 위한 이 가이드를 작성하는 데 필요한 교훈을 배우는 데 도움이 되었습니다.

특징:

  • 당신을 안아주는 무료 라이브 배경 화면 앱
  • 선택할 수있는 12 가지 독특한 ooshis
  • 잠금 해제 및 구매 가능한 무료 콘텐츠
  • 현재 날씨 업데이트
  • 소셜 로그인 및 데이터 동기화
  • 계절의 인사
  • 많은 놀라움
  • 닌자 고양이
  • 우리가 포옹을 언급 했습니까?

성공적인 Android 앱은 때때로 당신을 미소 짓게 만듭니다.

수업 3: 실현되도록 노력하십시오

Ooshies는 매우 간단한 Android 앱 아이디어처럼 보였습니다. 배경을 칠하고, 구름과 별을 오버레이하고, 풍선을 얹은 곰을 맨 위에 올려 놓으면 됩니다. 그러나 아니요, 그것은 안드로이드입니다! 쉬워 보이는 것이 종종 매우 어렵고 우리는 같은 일반적인 실수를 계속 반복하는 경향이 있습니다. 내가 직면한 문제에 대한 간략한 요약은 다음과 같습니다.

  1. 하드웨어 가속 - GPU가 훨씬 더 나은데 CPU를 사용하여 그리는 이유는 무엇입니까? 캔버스에 비트맵을 그리는 것은 하드웨어 가속이 불가능하다는 것이 밝혀졌습니다. 적어도 당분간은 아닙니다.

  2. OpenGL - 하드웨어 가속을 원하면 OpenGL ES를 사용하거나 대부분의 작업을 수행하는 더 나은 프레임워크를 사용해야 합니다.

  3. 비트맵 로딩 - 잘 알려진 메모리 소비 문제. 단일 픽셀을 표시하려면 #ARGB의 각 채널에 대해 1바이트[0-255]의 메모리를 할당해야 합니다. 또한 우리가 자주 사용하는 이미지는 장치의 디스플레이보다 해상도가 더 높습니다. 모두 로드하면 OutOfMemroyException이 빠르게 발생합니다.

  4. 홈 런처 - 라이브 월페이퍼는 홈 런처 프로세스에서 호스팅되며 다른 런처는 라이브 월페이퍼 서비스(특히 Nova 및 TouchWiz)에 다른 콜백을 제공하는 경향이 있습니다.

  5. 배터리 수명 - 제대로 수행하지 않으면 라이브 월페이퍼와 위젯이 배터리를 많이 소모할 수 있습니다. Lollipop(Android 5.0)의 끔찍한 배터리 수명에 대한 모든 소문과 함께 가장 먼저 이동하는 앱은 라이브 배경 화면이 될 것입니다.

그래서 비트맵을 오버레이하고 캔버스에 페인팅한 다음 터치하여 프레임을 전환하여 포옹하는 것은 CPU에서 수행하더라도 별 문제가 되지 않는 것 같죠? 맞습니다, 문제가 되지 않습니다. 그러나 누가 정적 라이브 배경 화면을 원합니까? 그것은 목적을 능가합니다. 배경 화면은 터치에 반응해야 하고 홈 화면을 스크롤할 때 움직여야 하며 임의의 친절 행위를 수행하고 사용자를 행복하게 해야 합니다.

그리고 이를 위한 Android 개발 트릭이 있습니다. 2차원 공간에 깊이를 더하는 시차 효과 라는 용어가 있습니다. 당신이 차를 운전한다고 상상해보십시오. 가까운 집이 멀리 있는 산보다 빠르게 움직인다. 캔버스에서 다른 속도로 개체를 움직여도 동일한 효과를 얻을 수 있습니다. 비록 그것들이 모두 같은 평면에 있지만, 당신의 뇌는 더 빠르게 움직이는 물체를 당신에게 더 가까이 있는 것으로 인식합니다. 그림자를 추가하는 것과 마찬가지로 시차 효과는 z축을 추가합니다.

그리고 이것은 모든 지옥이 풀려나는 곳입니다! Ooshie를 움직이는 대부분의 장치에서 날씨 오버레이와 배경은 서로 다른 속도로 인해 상당한 프레임 속도 저하가 발생합니다. 단일 프레임을 그리는 방법은 다음과 같습니다.

 canvas.drawBitmap(background, 0 - offsetX / 4, 0, null); canvas.drawBitmap(weatherOverlay, 0 - offsetX / 2, 0, null); if (!validDoubleTap) { canvas.drawBitmap(ooshieNormal, positionX - offsetX, positionY, null); } else { canvas.drawBitmap(ooshieTapped, positionX - offsetX, positionY, null); }

offset 은 사용자가 스크롤한 거리의 백분율입니다. 월페이퍼 엔진이 제공하는 콜백입니다.

 @Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset){ super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); // athe current offset should be a fraction of the screen offset to achieve parallax if (!isPreview()) { float newXOffset = xOffset * 0.15f; wallpaperDrawHelper.setOffsetX(newXOffset); if (isVisible() && hasActiveSurface) { wallpaperDrawHelper.drawFrame(false); } } }

OpenGL로 작업하는 방법을 알고 있다면 이 모든 것이 불필요하다는 점에 유의해야 합니다! 내 TODO 목록에 있습니다. 지금보다 더 복잡한 것은 하드웨어 가속이 필요하기 때문입니다. 그러나 당분간은 더 똑똑하지 않고 더 열심히 일해야 합니다(댓글에서 제안 사항에 열려 있습니다). 우리가 한 일은 다음과 같습니다.

4과: 가지고 있는 것으로 작업하기

minSdk=15 이니셔티브의 열렬한 지지자로서 처음부터 모든 2.x 장치를 제거했습니다. 이전 버전과의 호환성을 유지하기 위한 노력은 사용자가 휴대전화를 업그레이드할 수 없는\내키지 않는 수익보다 더 큽니다. 따라서 대부분의 경우 원하는 경우 시차를 비활성화하는 추가 옵션을 사용하여 원활한 경험을 얻을 수 있습니다.

이 Android 개발 가이드에 따라 시차를 비활성화하는 옵션을 제공하고 싶었습니다.

또 다른 큰 최적화는 비트맵을 처리하는 방법입니다. 세 개의 비트맵 대신 두 개의 비트맵을 그리면 매우 유사한 시차 효과를 얻을 수 있습니다.

  1. Ooshie 오버레이 - 트리밍되고 신중하게 조정된 Ooshie 비트맵(액세서리 가능)

  2. 결합된 오버레이 - Ooshie 속도의 일부로 이동하는 결합된 배경 및 날씨 비트맵

이 Android 개발 트릭은 약간의 시차 효과 저하를 위해 메모리를 절약하고 그리기 시간을 단축합니다.

홈 화면을 스크롤할 때 프레임이 매우 자주 그려집니다(초당 30회 이상 이상적으로). CPU 사용량을 최소화하려면 홈 화면이 보이지 않을 때(일부 잠금 화면, 일부 앱 서랍, 앱 열기/전환 등) 그리지 않는 것이 중요합니다.

이것은 모두 날씨 업데이트와 밀접하게 관련되어 있습니다. 처음에는 날씨를 동기화하기 위해 1~2시간 간격으로 실행하는 반복 작업이 있었지만 실제로는 무리였습니다. 사용자가 배경 화면을 볼 수 없는 경우 날씨 정보는 관련이 없습니다. 이제 날씨 업데이트는 배경 화면이 표시될 때만 발생합니다.

 long lastUpdate = prefStore.getLong(SharedPrefStore.Pref.WEATHER_TIMESTAMP); if (System.currentTimeMillis() - lastUpdate > Consts.WEATHER_UPDATE_INTERVAL){ // update the weather if obsolete Intent intent = new Intent(getApplicationContext(), WeatherUpdateService.class); startService(intent); }

따라서 기본적으로 메모리에 최적화된 부드러운 소프트웨어 비트맵 그리기에 대한 체크리스트는 다음과 같습니다.

  1. 비트맵을 한 번 결합
  2. 더 적은 비트맵 그리기
  3. 요청 시에만 다시 그리기
  4. 백그라운드 작업 피하기
  5. 사용자에게 프로세스에 대한 일부 제어권 제공

수업 5: 테스트. 테스트. 테스트

이것이 얼마나 중요한지 강조할 수 없습니다! 절대 , 절대 반복하지 않습니다. 테스트하기 전에 앱을 출시하십시오! 그리고, 나는 당신이 테스트를 해야 한다는 것을 의미하지 않습니다. 코드를 작성하고 작동 방식을 알고 기대치를 파악하여 결과에 영향을 줍니다. JUnit 테스트(권장되지만)가 아니라 단계적 출시, 즉 알파 및 베타 테스트에 대해 이야기하고 있습니다.

Android 소프트웨어 개발에 관심이 있는 경우 용어는 간단하지만 다음은 간략한 요약입니다.

  1. 알파 테스터 - 팀 동료와 업계 사람들, 가급적이면 Android 개발자로 구성된 소규모 그룹입니다. 그들은 고급 장치를 가지고 개발자 옵션을 가지고 놀 가능성이 있습니다. 그들은 스택 추적, 버그 보고서를 보내고 코드/UI 최적화 팁과 트릭을 제공합니다. 부분적/누락된 기능이 있는 초기 릴리스에 적합합니다.

  2. 베타 테스터 - 다양한 인구 통계를 가진 훨씬 더 광범위한 청중입니다. 안정적인 릴리스는 여기에 게시해야 합니다. 닌자 레벨이 너무 높더라도 가능한 모든 Android 배포와 사람들이 휴대전화를 사용하는 방식에 대해 설명은 고사하고 예측할 수 없습니다.

일단 알파를 통과하면 끝이라고 생각했습니다. 하지만, 꼬마야 내가 틀렸어?! 모든 Android 사용자가 최신 소프트웨어가 설치된 Nexus 기기를 가지고 있는 것은 아닙니다! 누가 알았겠어? :)

다음은 이 폭로를 기반으로 한 몇 가지 Android 개발 문제입니다.

  1. 런처마다 기본 홈 화면이 다릅니다. 일반적으로 첫 번째 또는 중간 화면이며, 제가 아는 한 그 위치를 알 수 있는 방법이 없습니다.

  2. 기본 홈 화면 위치를 모르면 Ooshie를 중앙에 배치하기 어렵습니다. 따라서 시차 오프셋을 조정하기 위한 설정 슬라이더입니다.

  3. 일반 사용자는 시차 오프셋 이 무엇을 의미하는지 모릅니다. 설정 페이지에서 훨씬 더 간단한 용어를 사용해야 합니다.

  4. 임의의 사용자가 다음 기능을 제안합니다.

그래서 저는 모든 베타 테스터들이 열심히 일한 것에 대해 감사를 표하고 싶습니다. 다른 사람보다 먼저 모든 최신 기능을 얻는 것이 그들의 헌신에 대한 합당한 보상이 되기를 바랍니다. 원하는 경우 Google+ 베타 커뮤니티의 일원이 될 수도 있습니다.

베타 테스트는 Android 초보자가 성공적인 Android 앱 프로그래밍을 시작할 때 염두에 두어야 할 중요한 단계입니다.

강의 6: 데이터가 말하게 하기

오늘날 눈에 띄는 Android 앱을 만드는 것은 2009년에는 없었을 때 계산기 앱을 만드는 것보다 조금 더 어렵습니다. 완벽한 앱을 만드는 것은 어렵습니다. 주로 완벽은 보는 사람의 눈에 있기 때문입니다. 나에게 좋은 것이 반드시 당신에게 좋은 것은 아닙니다. 그렇기 때문에 앱을 성장시키는 것이 중요합니다. 새로운 기능에 대한 로드맵 체크리스트는 2015년 전체에 대한 작업이 충분함을 보여줍니다. 무엇보다도 곧 다음이 포함될 것입니다.

  1. 소리
  2. 계절 배경
  3. 사용자 정의(배경 색상, 날씨 팩, ooshie 스킨 등)
  4. 지역별 우시(예: babushkas)
  5. 많은 새로운 ooshies 및 잠금 해제 방법

이제 모든 작업이 완료될 때까지 앱을 베타로 유지했을 수 있지만 그렇게 하면 귀중한 데이터를 버리고 있습니다. 모든 베타 테스터가 하루 중 일정 시간을 귀하에게 피드백을 보내는 데 할애하는 것은 아닙니다. 피드백을 얻기 위한 도구를 사용하여 이점을 얻을 수 있는 곳입니다. Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA 등을 사용하여 사용 데이터를 수집할 수 있습니다.

예를 들어, 데이터를 분석한 결과 사용자가 설정 버튼을 많이 클릭하지 않는다는 사실을 알게 되었고, 이를 보다 명확하게 만들고 설정 조정을 위한 빠른 자습서를 추가했습니다.

이것은 백그라운드 프로세스이지만 사용자 경험을 더욱 향상시키는 데 사용할 수 있습니다. 사용자에게 몇 번인지 표시하지 않는 이유:

  1. 그는 포옹을 받았다
  2. 얼마나 많은 비오는 날이 미소로 밝아 졌습니까?
  3. 미니 게임으로 Ooshie를 잠금 해제하는 데 필요한 탭 수
  4. 너 때문에 얼마나 많은 친구가 앱을 설치했는지

모든 Android 개발 가이드는 앱 최적화에서 Google Analytics의 중요성을 강조해야 합니다!

이것은 그들의 행동에 대한 결과를 제공하기 때문에 중요합니다. 사용자를 수동적인 콘텐츠 소비자로 만드는 우리 교육 시스템과 같은 실수를 하지 마십시오. 그들을 책임지게 하십시오. 그들에게 자신의 장치를 제어하고 자신만의 개인적인 경험을 만들 수 있는 옵션을 제공하십시오. 이 모든 것을 첫 번째 스플래시에서 미소를 훔치는 귀여운 번들로 포장할 수 있다면 콘텐츠 잠금 해제를 위해 스팸성 호의를 사용자에게 요청하는 것은 그리 무리가 아닙니다.

결국 이 데이터를 가이드로 하여 Android 앱 개발을 발전시켜야 합니다. 주로 엄마/아이들을 대상으로 하지만 이 앱은 다른 인구 통계에서 인기를 얻을 수 있습니다. 우리의 원래 비전과 맞지 않을 수도 있지만 사용자의 요구 사항은 충족되어야 합니다. 그렇지 않으면 그들은 할 수 있는 사람을 찾을 것입니다.

결론

나의 가장 성공적인 실패로 돌아가자. TweetPie. 몇 번의 수상과 엄청난 미디어 보도에도 불구하고 앱은 사용자를 유지하지 못했습니다(이 기사의 범위를 벗어난 이유).

성공이 항상 눈에 보이는 것은 아닙니다. 전체 경험 덕분에 나는 많은 것을 배웠습니다. 다양한 이벤트와 해커톤에서 스타트업으로서 실패하지 않는 방법 에 대해 최소한 12번의 강의를 했고 Toptal에서 몇 명의 고객을 확보했습니다.

더 중요한 것은 이 가이드의 팁과 트릭을 따라 Ooshies에서 동일한 Android 개발 실수를 반복하지 않으려는 것입니다.

이 긴 가이드를 마무리하기 위해 우리가 성공으로 정의하는 것은 나중에 우리가 처음에 목표로 설정한 것과 밀접하게 결합되는 것입니다. 가장 일반적인 성공 척도는 물론 많은 돈을 버는 것입니다. 당신의 앱이 성공하든 그렇지 않든 간에, 당신은 그것을 실현시키려고 노력해야 하고, 결국에는 당신이 더 나은 사람이 될 것이라고 저를 믿어야 합니다(바라건대 OpenGL을 배울 수 있는 사람). 당신은 새로운 친구, 적은 적은 적수, 그리고 당신이 충분히 운이 좋고 똑똑하다면 많은 사용자를 행복하게 만들 것입니다.

웹사이트를 확인하거나 Ooshis를 다운로드하여 사용해 볼 수 있습니다.