Create a Professional Android App from Your Website (No Coding Needed!)

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>

Leave a Comment