Android stille apk oppdatering

stemmer
0

Jeg vil gjerne ha en stille oppdatering i min app uten noen form for brukermedvirkning. Men jeg får alltid feilkoden 139. Maskinvaren er forankret! Kan noen hjelpe?

Her er koden:

public class UpdateAPK extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.updateapk);
    if (isRooted() == true) {
        Toast.makeText(UpdateAPK.this, Hardware is rooted, Toast.LENGTH_LONG).show();
        try {
            Process install = Runtime.getRuntime().exec(new String[] {su, -c, pm install -r /mnt/sdcard/app.apk});
            install.waitFor();
            if (install.exitValue() == 0) {
                // Success :)
                Toast.makeText(UpdateAPK.this, Success!, Toast.LENGTH_LONG).show();
            } else {
                // Fail
                Toast.makeText(UpdateAPK.this, Failure. Exit code:  + String.valueOf(install.exitValue()), Toast.LENGTH_LONG).show();
            }
        } catch (IOException e) {
            System.out.println(e.toString());
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else {

        //Do soemthing else

    }
}

Takk skal du ha!

Publisert på 08/03/2014 klokken 05:38
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Først erklære dette variabler, deretter ringe funksjon hvor du vil. Deretter gir superbruker, på superbruker program, sjekk muligheten til å alltid gi, for ikke brukermedvirkning.

final String libs = "LD_LIBRARY_PATH=/vendor/lib:/system/lib ";

final String commands = libs + "pm install -r " + "your apk directory"+ "app.apk";

instalarApk(commands);



private void instalarApk( String commands ) {
    try {

        Process p = Runtime.getRuntime().exec( "su" );
        InputStream es = p.getErrorStream();
        DataOutputStream os = new DataOutputStream(p.getOutputStream());

        os.writeBytes(commands + "\n");

        os.writeBytes("exit\n");
        os.flush();

        int read;
        byte[] buffer = new byte[4096];
        String output = new String();
        while ((read = es.read(buffer)) > 0) {
            output += new String(buffer, 0, read);
        }

        p.waitFor();

    } catch (IOException e) {
        Log.v(Debug.TAG, e.toString());
    } catch (InterruptedException e) {
        Log.v(Debug.TAG, e.toString());
    }
}
Svarte 29/05/2014 kl. 11:44
kilden bruker

stemmer
2

Jeg ville unngå hardkode hele SD-kort bane. Prøv noe som dette:

String filePath = Environment.getExternalStorageDirectory().toString() + "/your_app_directory/your_app_filename.apk";
Process installProcess = null;
int installResult = -666;

try
{
    installProcess = Runtime.getRuntime().exec("su -c pm install -r " + filePath);
}
catch (IOException e)
{
    // Handle IOException the way you like.
}

if (installProcess != null)
{
    try
    {
        installResult = installProcess.waitFor();
    }
    catch(InterruptedException e)
    {
        // Handle InterruptedException the way you like.
    }
}

if (installResult == 0)
{
    // Success!
}
else
{
    // Failure. :-/
}

Vær også forsiktig med tillatelser ... Du kan legge til:

<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
Svarte 17/09/2014 kl. 15:12
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more