通常はマルウェアと見なされるアプリを開発しようとしていますが、顧客の要求は非常に具体的で論理的です。ボルトで固定され、接続された約50〜100台の安価なAndroidスマートフォンがあり、アプリはセンサーデータの一部をtcp経由でリモートサーバーに送信することになっています。簡単そうに聞こえますが、私が苦労している機能が2つあります(私は経験豊富なAndroid開発者ではなく、電話を根付かせたことがないため)。
#1アプリは常にオンになっている必要があります。クラッシュした場合、サーバーはエラーレポート(スタックトレース)を取得する必要があり、アプリは10分後にもう一度再起動してからあきらめる必要があります。また、OSは理論的にアプリを強制終了する可能性があります(ただし、メモリ使用量を最小限に抑えるために最善を尽くしました)。なんとかしてそれも処理したいです。
#2ユーザーの操作をまったく必要とせずに、アプリをリモートで更新または自動更新できれば素晴らしいと思います(従来のユーザーがいないため)。
#1を実装するには、電話をルート化する以外の解決策はありません(AlarmsManagerは期待どおりに機能していないようで、最初のアプリケーションを処理するために別のアプリケーションを追加すると、気分が悪くなります)。足りないものはありますか?
機能#2の実装にアプローチする方法がまったくわかりません。アプリを市場に出し、インストール時に[このアプリケーションを常に最新の状態に保つ]チェックボックスをオンにすると、機能しますか?サービスの実行中に自動更新が発生しないこと、および発生したとしても、更新のインストール後にOSがサービスを再起動しないことを恐れています(機能#1が実装されていない場合)。プログラムで最新の.apkをダウンロードして開く場合でも、ユーザーは[インストール]ボタンをクリックする必要があります。更新可能な部分をスクリプト言語で実装することも検討しています。
Android APIの範囲内でこれらの問題の解決策はありますか?
編集:あなたの答えをありがとうございました、あなたは非常に役に立ちました。Androidをユーザー以外のハードウェアとして動作させる唯一の方法は、Androidをルート化することだと思われます。これがサイレント自動更新を行う唯一の方法です。cronを有効にすることで、Always onを実装できます(AlarmManagerは、クラッシュによるサービス終了の場合にイベントを発生させないようですが、別の些細なクラッシュ不可能なサービスで使用して、最初のサービスを実行し続けることができます)。