मुफ़्त APK बनाएँ

डिवाइस फ़ीचर

नेटिव फ़ोल्डर एक्सेस

WebView और ऑफ़लाइन HTML ऐप्स से SAF वाले लोकल फ़ोल्डर इस्तेमाल करें

1यह फ़ीचर क्या करता है#

यह फ़ीचर Storage Access Framework (SAF) के ज़रिए आपके वेब ऐप को उपयोगकर्ता के चुने एक Android फ़ोल्डर तक नियंत्रित पहुँच देता है। यह ऑफ़लाइन HTML ऐप्स, एडिटर, बैकअप/रिस्टोर और इम्पोर्ट/एक्सपोर्ट टूल्स के लिए अच्छा काम करता है।

यह डिवाइस स्टोरेज तक बेरोक पहुँच नहीं देता। उपयोगकर्ता खुद एक फ़ोल्डर चुनता है, और आपका ऐप सिर्फ़ उसी दी गई ट्री के अंदर काम कर सकता है।

2जनरेटर में चालू करें#

जनरेटर के चरण 4 में 'Native Folder Access (SAF)' ON करें। फिर ऐप बनाएँ।

चालू होने पर, कच्चे window.WebToApk ब्रिज के साथ-साथ आपकी वेबसाइट को window.WebToApkFS पर एक उच्च-स्तरीय हेल्पर भी मिलता है।

⚠️ Android 11+ स्टोरेज नोट: Android 11 और उससे ऊपर, साझा स्टोरेज पढ़ने के लिए विशेष 'All Files Access' अनुमति चाहिए। जब आपका बनाया ऐप पहली बार खुलता है और स्टोरेज अनुमति चालू है, तो वह अपने आप Android Settings स्क्रीन खोलता है ताकि उपयोगकर्ता यह अनुमति दे सके। उपयोगकर्ता बस Settings में टॉगल दबाकर ऐप में लौट आता है - हाथ से कहीं जाने की ज़रूरत नहीं।

3ब्राउज़र-सुरक्षित क्षमता जाँच#

अपना कोड हमेशा गार्ड करें ताकि वह Chrome/Safari में भी चले जहाँ Android ब्रिज मौजूद नहीं है:

function canUseNativeFiles() {
  return !!(window.WebToApkFS && window.WebToApkFS.isAvailable());
}

if (canUseNativeFiles()) {
  console.log('Android native folder access available');
}

4उपयोगकर्ता से फ़ोल्डर चुनने को कहें#

requestAccess() को बटन क्लिक या किसी स्पष्ट उपयोगकर्ता क्रिया से कॉल करें। यह Android का फ़ोल्डर पिकर खोलता है और चुने गए फ़ोल्डर का URI लौटाता है।

async function connectFolder() {
  const result = await window.WebToApkFS.requestAccess();
  if (!result.success) {
    alert('Folder access was not granted');
    return false;
  }
  console.log('Granted folder:', result.folderUri);
  return true;
}

5बुनियादी फ़ाइल ऑपरेशन#

पहुँच मिलने के बाद आप फ़ोल्डर सूचीबद्ध कर सकते हैं, डायरेक्टरी बना सकते हैं, टेक्स्ट फ़ाइलें पढ़ और लिख सकते हैं, एंट्री का नाम बदल सकते हैं और उन्हें हटा सकते हैं।

// Create folders
window.WebToApkFS.mkdir('notes');
window.WebToApkFS.mkdir('notes/2026');

// Write a file
window.WebToApkFS.writeText('notes/2026/today.txt', 'Hello from offline app');

// Read it back
const text = window.WebToApkFS.readText('notes/2026/today.txt');
console.log(text);

// List folder contents
const entries = window.WebToApkFS.list('notes/2026');
console.log(entries);

6नाम बदलें और हटाएँ#

Rename सिर्फ़ आख़िरी एंट्री का नाम बदलता है। Delete गैर-रिकर्सिव और रिकर्सिव, दोनों तरह से डायरेक्टरी हटाने को सपोर्ट करता है।

// Rename file or folder
window.WebToApkFS.rename('notes/2026/today.txt', 'journal.txt');

// Delete a single file
window.WebToApkFS.delete('notes/2026/journal.txt');

// Delete a folder tree
window.WebToApkFS.delete('notes/2026', { recursive: true });

7अच्छे इस्तेमाल#

✅ ऑफ़लाइन नोट या जर्नल ऐप्स
✅ CSV / JSON इम्पोर्ट-एक्सपोर्ट टूल्स
✅ सरल लोकल बैकअप और रिस्टोर
✅ स्टैटिक HTML एडिटर जो उपयोगकर्ता की सामग्री सेव करते हैं
✅ डैशबोर्ड ऐप्स जो रिपोर्ट को टेक्स्ट या CSV में एक्सपोर्ट करते हैं

8सीमाएँ#

⚠️ यह सिर्फ़ Android के लिए है। सामान्य डेस्कटॉप/मोबाइल ब्राउज़रों में यह मौजूद नहीं होगा।

⚠️ मौजूदा हेल्पर फ़ोल्डर सूची और टेक्स्ट फ़ाइलों के लिए बना है। बाइनरी वर्कफ़्लो के लिए अतिरिक्त APIs चाहिए।

⚠️ पहुँच सिर्फ़ उसी एक फ़ोल्डर तक सीमित है जिसकी अनुमति उपयोगकर्ता ने दी।

⚠️ इन APIs को पेज लोड होने के बाद कॉल करें ताकि हेल्पर इंजेक्ट हो चुका हो।

9पूरा काम करने वाला उदाहरण#

यह उदाहरण एक फ़ोल्डर जोड़ता है, एक वर्कस्पेस डायरेक्टरी बनाता है, एक JSON फ़ाइल लिखता है और फ़ोल्डर की सूची दिखाता है:

async function setupWorkspace() {
  if (!window.WebToApkFS || !window.WebToApkFS.isAvailable()) {
    console.log('Native folder access not available in this browser');
    return;
  }

  if (!window.WebToApkFS.hasAccess()) {
    const granted = await window.WebToApkFS.requestAccess();
    if (!granted.success) return;
  }

  window.WebToApkFS.mkdir('workspace');
  window.WebToApkFS.writeText(
    'workspace/config.json',
    JSON.stringify({ updatedAt: new Date().toISOString(), mode: 'offline' }, null, 2)
  );

  const files = window.WebToApkFS.list('workspace');
  document.getElementById('output').textContent = JSON.stringify(files, null, 2);
}

यह पेज ऐप के अंदर की इंटीग्रेशन गाइड से बनाया गया है, इसलिए इसमें वही लिखा है जो मौजूदा बिल्ड में है। इसे Markdown में पढ़ें.

2026-10-03 को शिप की गई गाइड से मिलान किया गया।