Soru Android uygulama kullanıcı verilerini temizle


kullanma adb kabuğu Uygulama verilerini temizlemek için

adb shell pm clear com.android.browser

Ancak bu komutu uygulamadan yürütürken

String deleteCmd = "pm clear com.android.browser";      
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec(deleteCmd);
        } catch (IOException e) {
            e.printStackTrace();                
        }

Konu:

Aşağıdaki verileri vermeme rağmen kullanıcı verilerinin hiçbir istisna vermediği anlaşılmıyor.

<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>

Soru:

Uygulama verilerini nasıl temizlerim? adb kabuğu?


76
2018-06-07 14:55


Menşei


Dış uygulama için verileri temizlemek için herhangi bir çözüm buldunuz mu? - Anshuman Jaiswal
Bir üçüncü taraf uygulamasının başka bir uygulamanın kullanıcı verilerini temizlemesine izin vermesi gerektiğini düşünmeyin. Böyle olsaydı karmaşa olurdu. - StoneLam


Cevaplar:


Bu komut benim için çalıştı:

adb shell pm clear packageName

140
2017-10-16 09:00



Sorun android uygulamasından bunu yürütüyor ... - UdayaLakmal
önbelleği de temizlemek için adb kullanmak mümkün mü? - android developer
@androiddeveloper Bu da önbelleği temizle - Eduardo Cuomo
@EduardoCuomo Tabii ki. Demek istediğim: Sadece önbelleği temizlemek için adb kullanmak mümkün mü? - android developer


Komuta pm clear com.android.browser root izni gerektirir.
Öyleyse koş su ilk.

İşte örnek kod:

private static final String CHARSET_NAME = "UTF-8";
String cmd = "pm clear com.android.browser";

ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true).command("su");
Process p = pb.start();

// We must handle the result stream in another Thread first
StreamReader stdoutReader = new StreamReader(p.getInputStream(), CHARSET_NAME);
stdoutReader.start();

out = p.getOutputStream();
out.write((cmd + "\n").getBytes(CHARSET_NAME));
out.write(("exit" + "\n").getBytes(CHARSET_NAME));
out.flush();

p.waitFor();
String result = stdoutReader.getResult();

Sınıf StreamReader:

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.CountDownLatch;

class StreamReader extends Thread {
    private InputStream is;
    private StringBuffer mBuffer;
    private String mCharset;
    private CountDownLatch mCountDownLatch;

    StreamReader(InputStream is, String charset) {
        this.is = is;
        mCharset = charset;
        mBuffer = new StringBuffer("");
        mCountDownLatch = new CountDownLatch(1);
    }

    String getResult() {
        try {
            mCountDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return mBuffer.toString();
    }

    @Override
    public void run() {
        InputStreamReader isr = null;
        try {
            isr = new InputStreamReader(is, mCharset);
            int c = -1;
            while ((c = isr.read()) != -1) {
                mBuffer.append((char) c);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (isr != null)
                    isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mCountDownLatch.countDown();
        }
    }
}

5
2018-03-24 07:20





Uygulama Verilerini silmek için lütfen Bu şekilde deneyin.

    public void clearApplicationData() {
    File cache = getCacheDir();
    File appDir = new File(cache.getParent());
    if (appDir.exists()) {
        String[] children = appDir.list();
        for (String s : children) {
            if (!s.equals("lib")) {
                deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
            }
        }
    }
}

public static boolean deleteDir(File dir) {
    if (dir != null &amp;&amp; dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }

    return dir.delete();
}

2
2018-06-07 15:07



Bunu kullanarak, kendi uygulama önbellek verilerini temizleyebilmemiz sayesinde, uygulamalarımızdan başka bir uygulama kullanıcı verilerini temizlemem gerekiyor - UdayaLakmal
@UdayaLakmal, başka bir uygulamanın önbellek verilerini temizleyememeniz gerekiyor, çünkü android uygulamaları diğer uygulamalar tarafından potansiyel olarak zararlı eylemlerden korumak için tasarlanmıştır. - Chris Stratton


Afaik Tarayıcı uygulama verileri diğer uygulamalarda silinemez, çünkü private_mode. Bu yüzden bu komutu yürütmek sadece köklü cihazlarda çalışmakla mümkündür. Aksi takdirde başka bir yaklaşım denemelisiniz.


1
2018-06-07 15:03



Komut satırı araçları uygulamaların kullanımı için uygun değildir. Muhtemelen onlar sadece sistem ayarları uygulaması eğer GUI düğmeleri itme bir kullanıcı için otorite benzer karşılaştırılabilir yarı ayrıcalıklı adb kabuk kullanıcısı için çalışacaktır. - Chris Stratton


Merhaba UdayaLakmal,

public class MyApplication extends Application {
    private static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static MyApplication getInstance(){
        return instance;
    }

    public void clearApplicationData() {
        File cache = getCacheDir();
        File appDir = new File(cache.getParent());
        if(appDir.exists()){
            String[] children = appDir.list();
            for(String s : children){
                if(!s.equals("lib")){
                    deleteDir(new File(appDir, s));
                    Log.i("TAG", "File /data/data/APP_PACKAGE/" + s +" DELETED");
                }
            }
        }
    }

    public static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }

        return dir.delete();
    }
}

Lütfen bunu kontrol et ve bana haber ver ...

Kodunu indirebilirsiniz İşte


0
2018-05-12 09:58





adb uninstall com.package.packagename

ADB kabuğunda bu komutu yürütün.

adb uninstall com.package.packagename -k 

-K kullanıcı verilerini koruyacak


-1
2018-02-08 16:12





// To delete all the folders and files within folders recursively
File sdDir = new File(sdPath);

if(sdDir.exists())
    deleteRecursive(sdDir);




// Delete any folder on a device if exists
void deleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
    for (File child : fileOrDirectory.listFiles())
        deleteRecursive(child);

    fileOrDirectory.delete();
}

-2
2018-03-24 07:25



Bu (uygun izinle kullanılırsa) uygulama ilişkilendirmesine bakılmaksızın Harici Depolamadaki paylaşılan dosyaları siler. O olmayacak herhangi bir uygulamanın özel dosyalarını siler, bu da sorunun neyle ilgiliydi. - Chris Stratton


Manuel olarak yapmak istiyorsanız, kullanıcı verilerinizi tıklayarak da temizleyebilirsiniz. “Clear Data”  düğme Settings–>Applications–>Manage Aplications–>  BAŞVURUNUZ

or Is there any other way to do that?

Sonra Kodu buradan indirin

enter image description here


-4
2018-06-07 16:03



Bunu pragmatik olarak yapmak istiyorum, denediğimi örnek olarak zaten denedim ama aradığım şey bu değil - UdayaLakmal
Bunu denediyseniz, lütfen bunu denediğinizi paylaşın. Tamam başka bir yol kontrol edeyim .. !! - Mehul Patel