こんにちは!私はIvanで、Androidアプリの開発者としてかなり長い間働いています。またはそう思われる。当時(2009年について話している)、Androidはまだ幼児で、私は見ていました リトルグリーンマン それ以来成長します。少し前に、Androidがなんとか私を超えてしまったのではないかと心配しています。
cfoはビジネスで何をしますか
今日、Androidはただオンになっているだけではありません 何万もの さまざまな携帯電話やタブレットの。それはあなたにあります 手首 、あなたの中で リビングルーム 、あなたの中で 車 、そして無生物にIPアドレスを割り当て始めるとすぐに、それは私たちの周りのほとんどどこにでもあるでしょう。でも多くの根拠 経験豊富なAndroid開発者 カバーするために!
またあります 100万のアプリ Google Playだけで、Amazon AppStoreや、中国のように一般的に関心のない市場は数えません。数え切れないほどのことを忘れないでください モバイルアプリ開発会社 毎年何十億もの収益を生み出しています。
だから、どうすれば 独立した開発者 大きなプレーヤーがいるこの巨大な市場で成功するアプリを作成しますか?わからない、成功したアプリを作っていない!でも、かわいいものを作ったので、お話を伺いたいと思います。
成功は(通常)一夜にして起こるものではなく、これは私の最初のアプリではありません。思いがけないものから 週末の開発ヒット お気に入り マケドニア正教会のカレンダー 、400万人以下が理解できる言語で30,000人以上のユーザーがいる、 TweetPie 、重いアプリ ハーフ カバレッジ そして600人を超えるアクティブユーザーのひどいユーザーベース。そこにはたくさんのレッスンがあります!
これらのアプリは、「ユーザーと呼ばれるとらえどころのない生き物」の心を少しよく理解するのに役立ちましたが、私にインスピレーションを与えたのは2時間のプロジェクトでした。もともと私を億万長者にするために開発されましたが、Googleが1ドルあたり30セントを奪うため、1,428,571人のユーザーがアプリを購入すると ドルアプリ 私の商人のアカウントをテストするために作られました。
数年後、幸せなお母さんから、アプリがハグするたびに男の子が笑っていたので、これまでで最高のお金だったというメールが届くとは、ほとんど知りませんでした。
そして、それがアイデアが生まれた方法です!抱擁のための基本的な人間の必要性を使用して、それをきれいにしてみませんか?特定のオーディエンス向けに、インタラクティブでやりがいがあり、使用するのが楽しく、共有するのがさらに楽しくなります。
私が上で述べたすべてのものは、ライブ壁紙アプリに追加されました。基本はそれほど推測するのは難しいことではありません。 AndroidはiOSよりも大きな市場シェアを持っていますが、iOSユーザーはより多くを購入します。メッセージングアプリは非常に人気がありますが、 フリーミアムゲーム 収益のトップ。中国、インド、ブラジル、ロシアは新興市場ですが、消費習慣が不足しています。あなたは読むことができます App Annie Index より多くの洞察のために。
では、ライブ壁紙アプリはこれにどのように適合しますか?まず第一に、それは以来、ほとんどのプラットフォームを排除します ライブ壁紙 Androidのものです。第二に、これは 特徴 Android 2.1で追加されたため、大きなコミュニティとかなりの数の美しい例があります。最も注目すべきは ペーパーランド そして ローマヌリックの オープンソース 美術館 、おそらくAndroid開発の最良の基準点です。
そこにはたくさんのライブ壁紙がありますが、それらのほとんどは風光明媚な天気のカテゴリに分類され、ごくわずかが かわいらしさオーバーロード カテゴリー。これは私たちが変更したかったものであり、まったく別の理由でロックを解除した場合でも、電話のロックを解除するたびに笑顔になるものを提供します。夜寝る前や朝の目覚ましを消すときに抱きしめる、かわいい小さな喜びをお届けします。そしてさらに良いことに、それを個人的でカスタマイズ可能にします。
さらに面倒なことはせず、技術的な詳細に入る前に、私は誇らしげにあなたに提示します: Ooshies-ライブ壁紙
それは特徴です:
Ooshiesは非常に単純なAndroidアプリのアイデアのように見えました。背景をペイントし、雲や星を重ね、風船を持ったクマを上に乗せれば、準備完了です。しかし、いいえ、それはAndroidです!簡単に思えることはしばしば非常に難しく、私たちは同じことを繰り返す傾向があります よくある間違い 何度も何度も。これが私が直面した課題の簡単な要約です:
ハードウェアアクセラレーション-GPUが非常に優れているのに、なぜCPUを使用して描画するのですか?さて、キャンバスにビットマップを描画することがわかりました ハードウェアアクセラレーションはできません 。少なくとも当分の間は。
OpenGL-ハードウェアアクセラレーションが必要な場合は、OpenGLESまたはそれ以上を使用する必要があります。 フレームワーク それは私たちのためにほとんどの仕事をします。
ビットマップの読み込み-よく知られているメモリ消費の問題。 1つのピクセルを表示するには、#ARGBの各チャネルに1バイト[0-255]のメモリを割り当てる必要があります。また、私たちが使用する画像は、多くの場合、デバイスのディスプレイよりも高い解像度を持っています。それらをすべてロードすると、すぐに OutOfMemroyException 。
ホームランチャー-ライブ壁紙はホームランチャープロセスでホストされ、ランチャーが異なれば、ライブ壁紙サービス(特にNovaとTouchWiz)に異なるコールバックを与える傾向があります。
バッテリーの寿命-正しく行われなかった場合、ライブ壁紙とウィジェットは多くのバッテリーを消耗する可能性があります。 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の操作方法を知っていれば、これらすべてが不要になることに注意する必要があります。それは私の すべて リスト。現在よりも複雑なものは、ハードウェアアクセラレーションが必要になるためです。しかし、当分の間、私は賢くではなく、もっと一生懸命働かなければなりません(私はコメントの提案を受け入れます)。これが私たちがしたことです:
minSdk=15
の大きな支持者としてイニシアチブ、最初からすべての2.xデバイスを排除しました。下位互換性を維持するための努力は、電話をアップグレードできない/アップグレードしたくないユーザーからの可能な収益よりも大きくなります。そのため、ほとんどの場合、必要に応じて視差を無効にするオプションを追加することで、スムーズなエクスペリエンスを実現できます。
もう1つの大きな最適化は、ビットマップの処理方法です。非常によく似た視差効果は、3つではなく2つのビットマップを描画することで実現できます。
Ooshieオーバーレイ-トリミングおよび慎重にスケーリングされたOoshieビットマップ(アクセサリ化可能)
結合されたオーバーレイ-Ooshieの速度の何分の1かで移動する結合された背景と天気のビットマップ
このAndroid開発のトリックは、わずかな視差効果を低下させるため、メモリを節約し、描画時間を短縮します。
ホーム画面をスクロールすると、フレームがかなり頻繁に描画されます(理想的には1秒間に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); }
したがって、基本的に、メモリが最適化されたスムーズなソフトウェアビットマップ描画のチェックリストは次のとおりです。
これがどれほど重要かは強調できません!決して、私は繰り返す 決して 、テストする前にアプリをリリースしてください。そして、私はあなたがテストをするべきだという意味ではありません。あなたはコードを書き、それがどのように機能するかを知っており、期待を知ることによって結果に影響を与えます。私はJUnitテストについて話しているのではなく(推奨されていますが)、 段階的な展開 つまり アルファおよびベータテスト 。
Androidソフトウェア開発に興味がある場合、用語は簡単ですが、簡単に説明します。
アルファテスター-チームメイトと業界の人々、できればAndroid開発者で構成される少数の人々。彼らはハイエンドのデバイスを持ち、遊んでいる可能性があります 開発者向けオプション 。スタックトレースやバグレポートが送信され、コード/ UI最適化のヒントやコツも提供されます。部分的/欠落した機能を備えた初期リリースに最適です。
ベータテスター-さまざまな人口統計を持つはるかに幅広い対象者。安定したリリースはここで公開する必要があります。忍者のレベルが高すぎる場合でも、考えられるすべてのAndroidディストリビューションと、人々が携帯電話を使用する方法を予測することはできません。
アルファを通過したら、完了したと思いました。しかし、私が間違っていた少年?!すべてのAndroidユーザーが最新のソフトウェアを搭載したNexusデバイスを持っているわけではないことが判明しました。誰が知っているだろうか? :)
この啓示に基づくAndroid開発の問題は次のとおりです。
ランチャーが異なれば、デフォルトのホーム画面も異なります。通常は最初または中央の画面であり、私が知る限り、その位置を知る方法はありません。
デフォルトのホーム画面の位置を知らずにOoshieを中央に配置するのは困難です。したがって、視差オフセットを調整するための設定スライダーです。
平均的なユーザーは何を知りません 視差オフセット つまり、設定ページではもっと単純な用語を使用する必要があります。
ランダムなユーザーがあなたの次の機能を提案します。
ですから、ベータテスターの皆さんの努力に感謝したいと思います。誰よりも早く最新の機能をすべて手に入れることが、彼らの献身に対するまともな報酬になることを願っています。必要に応じて、私たちの一部になることもできます Google+ベータコミュニティ 。
今日目立つAndroidアプリを作ることは、2009年に誰もいなくなった電卓アプリを作ることよりも少し難しいです。完璧なアプリを作ることは難しいです。主な理由は、完全性が見る人の目にあるからです。私にとって良いことは、必ずしもあなたにとって良いことを意味するわけではありません。そのため、アプリを成長させることが重要です。新機能のロードマップチェックリストは、2015年全体で十分な作業があることを示しています。特に次のものがまもなく含まれます。
さて、すべてが完了するまでアプリをベータ版のままにしていたかもしれませんが、そうすることで貴重なデータを捨てています。すべてのベータテスターが1日の一部をフィードバックの送信に費やすわけではありません。ここで、フィードバックを取得するためのツールを使用することでメリットが得られます。 Google Analytics、Flurry、Mixpanel、Crashalytics、 ACRA 、など使用状況データを収集します。
たとえば、データを分析することで、ユーザーが設定ボタンをあまりクリックしないことがわかったので、それをより明確にし、設定を微調整するための簡単なチュートリアルを追加しました。
これはバックグラウンドプロセスですが、ユーザーエクスペリエンスをさらに向上させるために使用できます。ユーザーに何回表示しないのですか?
それは彼らの行動に結果をもたらすので、これは重要です。私たちの教育システムと同じ過ちを犯さないでください。ユーザーは受動的なコンテンツの消費者になります。担当させてください。自分のデバイスを制御し、自分の個人的な体験を作成するオプションを提供します。これらすべてを、最初のスプラッシュで笑顔を盗むかわいいバンドルにパッケージ化することができれば、コンテンツのロック解除に対するスパムの好意をユーザーに求めるのにそれほど遠くはありません。
最終的には、ガイドとしてこのデータに基づいてAndroidアプリの開発を進化させる必要があります。主にママ/子供を対象としていますが、このアプリは他の人口統計で人気になる可能性があります。当初のビジョンには合わないかもしれませんが、ユーザーのニーズを満たす必要があります。そうでなければ、彼らはできる人を見つけるでしょう。
私の最も成功した失敗に戻りましょう TweetPie 。いくつかの賞と膨大なメディア報道にもかかわらず、アプリはユーザーを維持できませんでした(理由はこの記事の範囲を超えています)。
成功は必ずしも明白ではありません。全体の経験のおかげで、私はたくさんのことを学びました。私は少なくとも十数回の講義をしました スタートアップとして失敗する(しない)方法 さまざまなイベントやハッカソンに参加し、ApeeScapeで数人のクライアントを獲得することができました。
さらに重要なのは、このガイドのヒントとコツに従って、Ooshiesで同じAndroid開発の間違いを繰り返さないようにすることです。
この長いガイドを締めくくるために、私たちが成功と定義するのは、後の段階で、最初に目標として設定したものと緊密に結びついています。最も一般的な成功の尺度は、もちろん、たくさんのお金を稼ぐことです。アプリが成功するかどうかに関係なく、それを実現するように努める必要があります。最終的には、あなたがより良い人になると信じてください(できればOpenGLを学ぶことができます)。あなたは新しい友達を作り、敵はほとんどいません。そしてあなたが幸運で賢いなら、多くのユーザーを幸せにするでしょう。
あなたは私たちをチェックすることができます ウェブサイト または、Ooshiesをダウンロードして試してみてください。