Android एप्लिकेशन उपयोगकर्ता डेटा साफ़ करें


108

एप्लिकेशन डेटा को साफ़ करने के लिए adb शेल का उपयोग करना

adb shell pm clear com.android.browser

लेकिन आवेदन से उस कमांड को निष्पादित करते समय

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

मुद्दा:

यह स्पष्ट नहीं है कि उपयोगकर्ता डेटा न तो कोई अपवाद देता है, हालांकि मैंने निम्नलिखित अनुमति दी है।

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

सवाल:

एडीबी शेल का उपयोग करके एप्लिकेशन डेटा को कैसे साफ़ करें ?


3
क्या आपको बाहरी एप्लिकेशन के लिए डेटा साफ़ करने का कोई समाधान मिला?
अंशुमान जायसवाल

2
ऐसा मत सोचो कि किसी तीसरे पक्ष के एप्लिकेशन को किसी अन्य ऐप के उपयोगकर्ता डेटा को साफ़ करने की अनुमति होनी चाहिए। अगर ऐसा हुआ तो गड़बड़ हो जाएगी।
स्टोनलैम

जवाबों:


5

Afaik ब्राउज़र एप्लिकेशन डेटा अन्य ऐप्स के लिए क्लियर नहीं है, क्योंकि यह स्टोर है private_mode। इसलिए इस कमांड को निष्पादित करने से केवल रूट किए गए उपकरणों पर ही काम हो सकता है। अन्यथा आपको दूसरा तरीका आजमाना चाहिए।


एप्लिकेशन द्वारा उपयोग के लिए कमांड लाइन टूल का इरादा नहीं है। संभवतः वे केवल अर्ध-विशेषाधिकारित एडीबी शेल उपयोगकर्ता के लिए काम करेंगे, जिसे सिस्टम सेटिंग्स ऐप के तहत जीयूआई में बटन दबाने वाले उपयोगकर्ता के लिए कुछ हद तक तुलनीय माना जाता है।
क्रिस स्ट्रैटन

210

इस कमांड ने मेरे लिए काम किया:

adb shell pm clear packageName

2
क्या कैश को साफ़ करने के लिए भी adb का इस्तेमाल संभव है?
Android डेवलपर

4
@EduardoCuomo बेशक। मेरा मतलब था: क्या केवल कैश को साफ करने के लिए भी एडीबी का उपयोग करना संभव है?
Android डेवलपर

1
@ शायन आप केवल एप्लिकेशन कैश को हटाने के लिए निम्न लिंक की जांच कर सकते हैं: stackoverflow.com/questions/18589471/… मुझे यकीन नहीं है कि यह कमांड काम करेगा या नहीं।
मनमोहन सोनी

5

कमांड pm clear com.android.browserको रूट अनुमति की आवश्यकता होती है।
इसलिए, suपहले दौड़ें ।

यहाँ नमूना कोड है:

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();

वर्ग 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();
        }
    }
}

3

एप्लिकेशन डेटा साफ़ करने के लिए कृपया इस तरह से प्रयास करें।

    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();
}

मैं यह कोशिश करता हूं, इसका उपयोग करने से हमारे स्वयं के एप्लिकेशन कैश डेटा को साफ किया जा सकता है, मुझे हमारे एप्लिकेशन से किसी अन्य ऐप उपयोगकर्ता डेटा को साफ़ करने की आवश्यकता है
UdayaLakmal

2
@ UdayaLakmal आप किसी अन्य एप्लिकेशन के कैशे डेटा को साफ़ करने में सक्षम नहीं होने वाले हैं, क्योंकि एंड्रॉइड को अन्य अनुप्रयोगों द्वारा संभावित दुर्भावनापूर्ण कार्यों से अनुप्रयोगों की सुरक्षा के लिए डिज़ाइन किया गया है।
क्रिस स्ट्रैटन

1

नमस्ते उदयकाल,

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();
    }
}

कृपया इसे देखें और मुझे बताएं ...

आप यहाँ से कोड डाउनलोड कर सकते हैं


-2
// 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();
}

1
यह (यदि उपयुक्त अनुमति के साथ उपयोग किया जाता है) ऐप एसोसिएशन की परवाह किए बिना बाहरी संग्रहण पर साझा की गई फ़ाइलों को हटा देगा। यह नहीं होगा किसी भी अनुप्रयोग है, जो है क्या सवाल के बारे में था के निजी फ़ाइलें हटाएँ।
क्रिस स्ट्रैटन

-6

यदि आप मैन्युअल रूप से करना चाहते हैं तो आप अपने आवेदन “Clear Data” में बटन पर क्लिक करके अपने उपयोगकर्ता डेटा को भी साफ़ कर सकते हैंSettings–>Applications–>Manage Aplications–>

or Is there any other way to do that?

इसके बाद यहां कोड डाउनलोड करें

यहां छवि विवरण दर्ज करें


मैं वह व्यावहारिक रूप से करना चाहता हूं, वह उदाहरण जो आप सुझाते हैं कि मैंने पहले ही कोशिश की थी, लेकिन वह नहीं है जिसकी मुझे तलाश है
उदयकाल

यदि आपने वह प्रयास किया है तो कृपया साझा करें कि आपने वह प्रयास किया है। ठीक है, मुझे दूसरे तरीके के लिए जाँच करें .. !!
स्ट्राइडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.