2

この質問は以前に尋ねられた可能性がありますが、明確な答えは得られませんでした。私は基本的に、更新やその他のものとのクライアントのやり取りを望んでいません。彼らが見ることができるのは、実行中のアプリだけであり、彼らは満足しています。しかし、これを行うには、バックグラウンド スレッド、または市場で新しい更新プログラムをチェックし、その背後で更新し、更新プログラムを適用した後にアプリを再起動するものが必要です。

PS私はAndroid開発にまったく慣れていないので、クレイジーに聞こえたら本当に申し訳ありませんが、これは私の要件です

4

2 に答える 2

3

私の知る限り、root アクセス権があれば可能です。プロセスは次のようになります。

  1. あなたのアプリは/system/appフォルダーにあります(システムアプリとして)
  2. 次の権限が必要です。

    android.permission.INSTALL_PACKAGES
    android.permission.DELETE_PACKAGES
    android.permission.CLEAR_APP_CACHE
    android.permission.WRITE_EXTERNAL_STORAGE
    android.permission.MOUNT_UNMOUNT_FILESYSTEMS
    
  3. アプリはシステム署名で署名する必要があります

    java -jar signapk.jar platform.x509.pem platform.pk8 helloworld.apk hello.apk
    
  4. バックグラウンド スレッドで更新を確認し、更新された .apk ファイルを一時的な場所にダウンロードします。apk_path

  5. コマンドをプログラムで実行pm install apk_pathします。以下はスニペットです。

    public String silentInstallation(String apkPath)
    {
            String[] args = { "pm", "install", "-r", apkPath };             
            ProcessBuilder processBuilder = new ProcessBuilder(args);  
            Process process = null;  
            InputStream errIs = null;  
            InputStream inIs = null;  
            try {  
                ByteArrayOutputStream baos = new ByteArrayOutputStream();  
                int read = -1;  
                process = processBuilder.start();  
                errIs = process.getErrorStream();  
                while ((read = errIs.read()) != -1) {  
                    baos.write(read);  
                }  
                baos.write('\n');  
                inIs = process.getInputStream();  
                while ((read = inIs.read()) != -1) {  
                    baos.write(read);  
                }  
                byte[] data = baos.toByteArray();  
                result = new String(data);  
            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    if (errIs != null) {  
                        errIs.close();  
                    }  
                    if (inIs != null) {  
                        inIs.close();  
                    }  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
                if (process != null) {  
                    process.destroy();  
                }  
            }  
            return result;  
    }
    

それが役に立てば幸い。

于 2013-03-13T02:10:07.850 に答える
3

ユーザーの操作なしにアプリを更新 (またはインストール) することはできません。

  1. あなたはシステムアプリ(カスタムROM)です
  2. デバイスはルート化されており、アップデーターにはルート権限があります。

さらに、Google Play ストアで入手できるアプリのバージョンを確認するための公式 API はありません。

Google Play の外部で現在のバージョンを追跡し、マーケット リンクを起動してユーザーに更新を促すことで、やろうとしていることのいくつかを達成できます。セカンダリ アプリからそれを行う場合は、更新が完了するのを待ってから、アプリを再起動することもできます。

実際には、ユーザーの操作なしにサイレント インストール/更新を実行することはできません。これは、最初の数人のコメント投稿者が述べた理由から、良いこと (tm) です。

于 2013-03-13T02:12:28.277 に答える