Turn your website into a fully functional Android app in just a few minutes
आज के डिजिटल दौर में हर बिज़नेस मोबाइल पर दिखना चाहता है। अगर आप अपनी वेबसाइट को Android App में बदलना चाहते हैं तो यह बिल्कुल आसान है। अब बिना कोई कोडिंग सीखे आप कुछ ही मिनटों में अपनी वेबसाइट को एक प्रोफेशनल मोबाइल ऐप में कन्वर्ट कर सकते हैं। Android App होने से आपका बिज़नेस ज़्यादा लोगों तक पहुँचेगा और ग्राहकों का भरोसा भी बढ़ेगा। चाहे आपकी वेबसाइट ब्लॉग की हो, ऑनलाइन स्टोर की या किसी सर्विस की — उसे आसानी से ऐप में बदला जा सकता है। बस कुछ आसान स्टेप्स फॉलो करें और अपना ऐप Google Play Store पर लॉन्च करें।
सबसे पहले हम Android Studio Install करना होगा अगर आप के पास Android Studio तो Download कर लेंगे उस के बाद
New> ew Project > No Activity Select करेंगे और Next करेंगे

Name > Packege name > Save location > Language > Minimum SDK > Build configuration languge में Groovy DSL (build,gradle) ये सभी चीजें Select करेंगे और Finish करेंगे

जब Finish करेंगे तो थोरा Time लगेगा Android Studio को ready होने में जब ये ready होजाए हम लोगों को एक Activity बनाना होगा या बनानी होगी जो भी !
1 New Activity बनेगा कैसे उस के लिए हम जायेंगे app > manifests > AndroidManifest.xml यहाँ AndroidManifest.xml के उपर डबल Click करदेंगे !
2 अब उस के निचे java है इस के Arrow के उपर Mous रखेंगे तो नीचे पैकेज का नाम देखी देगा उस के उपर राइट click करेंगे

com.noactivity> right click > New > Activity > Empty Views Activity के उपर click करेंगे फिर Launcher Activity के उपर click करेंगे

फिर Finish करेंगे

इस तरह का तीन Option या 3 Section खुलेगा हर Section का Code Ready है और निचे दिए हुए हैं !
AndroidManifest.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”>
<uses-permission android:name=”android.permission.INTERNET” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
<application
android:allowBackup=”true”
android:dataExtractionRules=”@xml/data_extraction_rules”
android:fullBackupContent=”@xml/backup_rules”
android:icon=”@mipmap/ic_launcher”
android:label=”@string/app_name”
android:roundIcon=”@mipmap/ic_launcher_round”
android:supportsRtl=”true”
android:theme=”@style/Theme.AyanComputer”
tools:targetApi=”31″>
<!– ✅ MainActivity exported true hona chahiye –>
<activity
android:name=”.MainActivity”
android:exported=”true”
android:screenOrientation=”portrait”/>
<!– ✅ SplashActivity launcher activity –>
<activity
android:name=”.SplashActivity”
android:exported=”true”
android:screenOrientation=”portrait”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipeRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- ✅ WebView -->
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
tools:ignore="MissingConstraints" />
<!-- ✅ ProgressBar (Top Loading Line) -->
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:indeterminate="false"
android:max="100"
android:visibility="gone" />
</FrameLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
MainActivity.java
package in.ayancomputer;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.DownloadManager;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.GeolocationPermissions;
import android.webkit.PermissionRequest;
import android.webkit.URLUtil;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private SwipeRefreshLayout swipe;
private ProgressBar progress;
private static final String HOME_URL = "https://shopseva.in/";
private ValueCallback<Uri[]> fileChooserCallback;
private ActivityResultLauncher<String> openFileLauncher;
@SuppressLint({"SetJavaScriptEnabled", "WrongViewCast"})
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
swipe = findViewById(R.id.swipeRefresh);
progress = findViewById(R.id.progressBar);
// ✅ Permission Check
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_DENIED) {
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permissions, 1);
}
}
// ✅ File Chooser setup
openFileLauncher = registerForActivityResult(
new ActivityResultContracts.GetMultipleContents(),
uris -> {
if (fileChooserCallback != null) {
if (uris != null && uris.size() > 0) {
fileChooserCallback.onReceiveValue(uris.toArray(new Uri[0]));
} else {
fileChooserCallback.onReceiveValue(new Uri[]{});
}
fileChooserCallback = null;
}
}
);
// ✅ WebView Settings
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
settings.setAllowFileAccess(true);
settings.setAllowContentAccess(true);
settings.setMediaPlaybackRequiresUserGesture(true);
// ✅ Better scrolling experience
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
// ✅ Smooth scrolling
webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.setVerticalScrollBarEnabled(true);
webView.setHorizontalScrollBarEnabled(false);
// ✅ Nested Scrolling enable
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.setNestedScrollingEnabled(true);
}
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}
// ✅ SwipeRefresh Logic
swipe.setOnRefreshListener(() -> {
webView.reload();
});
// ✅ Disable SwipeRefresh when WebView is scrolling
webView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY > 0) {
swipe.setEnabled(false);
} else {
swipe.setEnabled(true);
}
}
});
// ✅ UPDATED: WebViewClient with Social Sharing Support
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progress.setVisibility(View.VISIBLE);
swipe.setRefreshing(true);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
Log.d("URL_LOADING", "Loading URL: " + url);
// ✅ Social Media Apps Handling
if (url.startsWith("whatsapp://") || url.contains("api.whatsapp.com") ||
url.startsWith("fb://") || url.contains("facebook.com/share") ||
url.startsWith("instagram://") || url.contains("instagram.com/share") ||
url.startsWith("twitter://") || url.contains("twitter.com/intent/tweet") ||
url.startsWith("tg://") || url.contains("t.me/share") ||
url.startsWith("linkedin://") || url.contains("linkedin.com/shareArticle")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
} catch (ActivityNotFoundException e) {
// Agar app installed nahi hai, to browser mein open karein
if (url.contains("whatsapp")) {
String webUrl = "https://web.whatsapp.com/";
view.loadUrl(webUrl);
} else {
view.loadUrl(url);
}
return true;
}
}
// ✅ Standard URL Schemes
if (url.startsWith("tel:") || url.startsWith("mailto:") ||
url.startsWith("sms:") || url.startsWith("intent:") ||
url.startsWith("market:") || url.startsWith("geo:")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
} catch (ActivityNotFoundException e) {
Toast.makeText(MainActivity.this, "App not installed", Toast.LENGTH_SHORT).show();
}
return true;
}
// ✅ External URLs (Other websites)
if (!url.startsWith("https://shopseva.in") &&
!url.startsWith("http://shopseva.in") &&
!url.startsWith("https://www.shopseva.in") &&
!url.startsWith("http://www.shopseva.in")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
} catch (Exception e) {
// Fallback to WebView
return false;
}
}
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
progress.setVisibility(View.GONE);
swipe.setRefreshing(false);
// ✅ JavaScript Injection for Better Social Sharing
injectSocialSharingJS();
super.onPageFinished(view, url);
}
});
// ✅ WebChromeClient
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
progress.setVisibility(View.VISIBLE);
progress.setProgress(newProgress);
if (newProgress >= 100) {
progress.setVisibility(View.GONE);
swipe.setRefreshing(false);
}
super.onProgressChanged(view, newProgress);
}
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
fileChooserCallback = filePathCallback;
openFileLauncher.launch("*/*");
return true;
}
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
}
@Override
public void onPermissionRequest(PermissionRequest request) {
request.grant(request.getResources());
}
});
// ✅ Download Listener
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimeType,
long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setMimeType(mimeType);
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader("cookie", cookies);
request.addRequestHeader("User-Agent", userAgent);
request.setDescription("Downloading file...");
request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
URLUtil.guessFileName(url, contentDisposition, mimeType));
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_SHORT).show();
}
});
// ✅ Load URL
if (getIntent().getData() != null) {
webView.loadUrl(getIntent().getData().toString());
} else {
webView.loadUrl(HOME_URL);
}
// ✅ Handle Intent for Sharing (Agar koi aur app se share kare)
handleIntent(getIntent());
}
// ✅ JavaScript Injection for Social Sharing - FIXED (No Text Blocks)
private void injectSocialSharingJS() {
String jsCode = "javascript:(function() {" +
"var socialLinks = document.querySelectorAll('a[href*=\"share\"], a[href*=\"twitter.com/intent\"], a[href*=\"facebook.com/sharer\"], a[href*=\"linkedin.com/share\"], a[href*=\"api.whatsapp.com\"]');" +
"for (var i = 0; i < socialLinks.length; i++) {" +
" socialLinks[i].addEventListener('click', function(e) {" +
" window.open(this.href, '_system');" +
" });" +
"}" +
"})();";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(jsCode, null);
} else {
webView.loadUrl(jsCode);
}
}
// ✅ Handle Intent for Sharing from other apps
private void handleIntent(Intent intent) {
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
// Text share handle karein
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
// Shared text ko WebView mein process karein
webView.loadUrl(HOME_URL + "?shared_text=" + Uri.encode(sharedText));
}
}
}
}
// ✅ Back Button
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
new AlertDialog.Builder(this)
.setTitle("EXIT")
.setMessage("Are you sure you want to close this app?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
}
// ✅ New Intent handle karein (Agar app already running hai)
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
}
SplashActivity
Splash Activity देकेंगे! लेकिन कैसे Create करते हैं उसके के लिए हम जाएँगे Righte Click में java > New > Activity > Epty Views Activity करेंगे ये ध्यान रहरे सिर्फ java के उपर ही right click करेंगे न कि app name के उपर

जब भी iava क्लास में कोइ नाम देंगे तो नाम में स्पेस नहीं देना होगा! अब Finish करेंगे
activity splash.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:background="@android:color/white"
tools:context=".SplashActivity">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/logo"
android:scaleType="fitCenter"
android:layout_marginTop="220dp"/>
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="220dp"
android:layout_height="10dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:indeterminate="true"
android:max="100"
android:progress="0"/>
</LinearLayout>