D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Автор zebra0_0
Источник https://xss.is
Всем привет, в этой статье я хочу рассказать для людей которые не разбираются в Андроиде как превратить любой сайт в приложение на телефоне. Чтоб это сделать вам понадобится Android Studio и Java так как придётся писать код. Если её у вас нет что вероятнее всего то просто зайдите на YouTube и там вы найдёте много подробных гайдов, тут расписывать не буду чтоб не засорять статью водой.
Зачем оно надо: В цем такое приложение может быть полезно чтоб не надо было каждый раз заходить и логинется на пример на сайт потому-что с ним достаточно нажать по иконе или например можно за 5мин дописать пароль(Если не умеете то я к вашим услугам) и выйдет что у вас 1 сайт под паролем и никто не сможет в него залезть или если вы не хотите чтоб то что вы смотрите попадало к вам в историю браузера то приложение будет очень полезно так-как оно работает без входа в гугл акаунт.
Как это работает:
В андроиде есть такая вещь как WebView. WebView - это буквально поле в котором открывается браузер что и даёт нам возможность реализовать любой сайт в приложение.
Чтоб начать зайдите в папку по пути: res/layout и откройте activity_main.xml это файл с xml разметкой для файла MainActivity и определят внешний вид страницы.
activity_main.xml
XML: Скопировать в буфер обмена
В этом коде
В MainActivity на нужно:
Java: Скопировать в буфер обмена
Код: Скопировать в буфер обмена
Логику для WebView:
В java классе MainActivity в классе OnCreate который отвечает за то что произойдёт при создании Активити пишем такой код:
Java: Скопировать в буфер обмена
чтоб вы могли понять что в нём написано давайте я разберу всё по строкам логику для webView.
Теперь перейдём к настройкам WebView, и хоть можно без них но тогда вы не сможете полноценно передвигается по страницам вебсайта и полноценно с ним взаимодействовать.
Для полноценной работы сайта нам надо настроить такие параметры как:
Java: Скопировать в буфер обмена
Включение JavaScript:
Java: Скопировать в буфер обмена
Включение кеша:
Java: Скопировать в буфер обмена
Доступ к файлам:
Java: Скопировать в буфер обмена
Включение базы данных:
Java: Скопировать в буфер обмена
Поддержка смешанного контента (HTTP+HTTPS):
Java: Скопировать в буфер обмена
Включение отображения JavaScript-алертов и других событий:
Java: Скопировать в буфер обмена
Установка WebViewClient для обработки всех переходов внутри WebView:
Java: Скопировать в буфер обмена
Всё в месте:
Java: Скопировать в буфер обмена
Обработчик назад:
Чтоб если вы случайно кликнули по рекламе или просто вернутся на прошлую страницу без надобности перезапуска приложения надо написать обработчик назад.
Java: Скопировать в буфер обмена
Тут просто в новом классе прописано WebView webView = findViewById(R.id.webview) что предопределяет для чего будет работать метод, который вызывается, когда пользователь нажимает кнопку "Назад" на своём устройстве Android.
Настройки Прилоежния
Как и любому Android приложению этому нужно получать разрешения для работы, а именно для этого оно нужно всего 1. Это доступ к Интернету, его нужно прописать в файле manifests/AndroidManifest.xml после <manifest.
Разрешение:
XML: Скопировать в буфер обмена
как это должно выглядеть:
Посмотреть вложение 98880
На это в целом всё если вас интересует открытие напрем форумов или чего-то подобного но если вы хотите смотреть видео то:
Поддержка полноэкранного режима для видео:
Если вы хотите внутри приложения открывать видео хостинг например YouTube то чтоб просматривать в нём видео в полноэкранном режиме недостаточно то что было написано ранее, нужно дописать ещё некоторый код:
Java: Скопировать в буфер обмена
Полноэкранный режим настраивается с помощью методов WebChromeClient:
Java: Скопировать в буфер обмена
Этот код нужен для того, чтобы при нажатии кнопки "Назад" пользователь мог выйти из полноэкранного режима:
Java: Скопировать в буфер обмена
Для того чтоб это надо дописать в AndoidManifest.xml внутри <activity прописать активности для поддержки полноэкранного режима:
XML: Скопировать в буфер обмена
Как это должно выглядеть:
Чтоб вам не пришлось собирать всё почестям оставляю фулл код для всех файлов:
main_avtivity.xml:
XML: Скопировать в буфер обмена
MainActivity:
Java: Скопировать в буфер обмена
AndroidManifest.xml:
XML: Скопировать в буфер обмена
ВНИМАНИЕ: в файлах используется нейминг моих приложений поэтому после copy, paste замените в первой строке MainActivity .nbsp; на имя вашего файла и в andorid манифест соответственно все nbsp на имя вашего проекта. И убедитесь что имена файлов в вашем проекте как у меня
Для тех кто не разбирается в программирование или что-то не получается я пишу билд который будет делать всё сам, постараюсь зарелизить в течение пары дней.
Ну и на этом уже реально всё, большое спасибо за внимание. В комментариях с удовольствием по отвечаю на вопросы
Источник https://xss.is
Всем привет, в этой статье я хочу рассказать для людей которые не разбираются в Андроиде как превратить любой сайт в приложение на телефоне. Чтоб это сделать вам понадобится Android Studio и Java так как придётся писать код. Если её у вас нет что вероятнее всего то просто зайдите на YouTube и там вы найдёте много подробных гайдов, тут расписывать не буду чтоб не засорять статью водой.
Зачем оно надо: В цем такое приложение может быть полезно чтоб не надо было каждый раз заходить и логинется на пример на сайт потому-что с ним достаточно нажать по иконе или например можно за 5мин дописать пароль(Если не умеете то я к вашим услугам) и выйдет что у вас 1 сайт под паролем и никто не сможет в него залезть или если вы не хотите чтоб то что вы смотрите попадало к вам в историю браузера то приложение будет очень полезно так-как оно работает без входа в гугл акаунт.
Как это работает:
В андроиде есть такая вещь как WebView. WebView - это буквально поле в котором открывается браузер что и даёт нам возможность реализовать любой сайт в приложение.
Чтоб начать зайдите в папку по пути: res/layout и откройте activity_main.xml это файл с xml разметкой для файла MainActivity и определят внешний вид страницы.
activity_main.xml
XML: Скопировать в буфер обмена
Код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
- <RelativeLayout это поле в котором находится наш WebView
- его мы растягиваем на весь экран с помощью: android:layout_width - ширина , android:layout_height - высота. В них мы ставим значения match_parent(соответствие родителю) то есть по размерам окна или либо другого окна в котором находится объект.
- <WebView - то что было описано ранее
- его мы растягиваем так-же как и поле <RelativeLayout
- Ещё мы добавляем ему Id чтоб его можно было вызывать в коде
В MainActivity на нужно:
- импортировать библиотеки
- Сделать переменную и задать ей в значения ссылку на сайт который нужно открывать
- Написать логику для WebView
- Настроить WebView
- создать обработчик назад
- Настройки Прилоежния
- Добавить логику для полноэкранного режима
Java: Скопировать в буфер обмена
Код:
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
- Эти строки импортируют нужные классы из Android SDK.
- Bundle — класс для хранения состояния приложения.
- WebChromeClient и WebViewClient — классы для настройки поведения WebView.
- WebSettings — класс для настройки параметров WebView.
- AppCompatActivity — основной класс для создания активности с поддержкой старых версий Android.
Код: Скопировать в буфер обмена
private String websiteUrl = "";
Логику для WebView:
В java классе MainActivity в классе OnCreate который отвечает за то что произойдёт при создании Активити пишем такой код:
Java: Скопировать в буфер обмена
Код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.webview);
- super.onCreate(savedInstanceState) - Вызывает реализацию метода onCreate() в классе-родителе (AppCompatActivity). Это важно для того, чтобы система могла выполнить стандартные операции инициализации, такие как создание интерфейса, работа с темами и стилями.
- setContentView(R.layout.activity_main) - Тут мы устанавливаем какой xml файл будет использоваться для WebView
- WebView webView = findViewById(R.id.webview) - Он находит и связывает элемент пользовательского интерфейса из XML-файла с кодом.
- findViewById(R.id.webview): Метод findViewById() используется для поиска элемента интерфейса по его уникальному идентификатору. В данном случае ищется элемент с id равным webview который мы определяли ранее в xml файле.
- WebView webView: Переменная webView теперь ссылается на элемент WebView, который определён в макете activity_main.xml.
Теперь перейдём к настройкам WebView, и хоть можно без них но тогда вы не сможете полноценно передвигается по страницам вебсайта и полноценно с ним взаимодействовать.
Для полноценной работы сайта нам надо настроить такие параметры как:
- поддержка хранения DOM
- Включение JavaScript
- Включение кеша
- Доступ к файлам
- Включение базы данных
- Поддержка смешанного контента (HTTP+HTTPS)
- Включение отображения JavaScript-алертов и других событий
- Установка WebViewClient для обработки всех переходов внутри WebView
Java: Скопировать в буфер обмена
webSettings.setDomStorageEnabled(true); // Включение поддержки хранения DOM
Включение JavaScript:
Java: Скопировать в буфер обмена
webSettings.setJavaScriptEnabled(true); // Включение JavaScript
Включение кеша:
Java: Скопировать в буфер обмена
webSettings.setDatabaseEnabled(true); // Включение кеша
Доступ к файлам:
Java: Скопировать в буфер обмена
webSettings.setAllowFileAccess(true); // Доступ к файлам
Включение базы данных:
Java: Скопировать в буфер обмена
webSettings.setDatabaseEnabled(true); // Включение базы данных
Поддержка смешанного контента (HTTP+HTTPS):
Java: Скопировать в буфер обмена
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // Поддержка смешанного контента (HTTP+HTTPS)
Включение отображения JavaScript-алертов и других событий:
Java: Скопировать в буфер обмена
webView.setWebChromeClient(new WebChromeClient());// Включение отображения JavaScript-алертов и других событий
Установка WebViewClient для обработки всех переходов внутри WebView:
Java: Скопировать в буфер обмена
Код:
// Установка WebViewClient для обработки всех переходов внутри WebView
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); // Обработка переходов внутри WebView
return true;
}
});
Всё в месте:
Java: Скопировать в буфер обмена
Код:
// Настройки WebView
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // Включение JavaScript
webSettings.setDomStorageEnabled(true); // Включение поддержки хранения DOM
webSettings.setDatabaseEnabled(true); // Включение кеша
webSettings.setAllowFileAccess(true); // Доступ к файлам
webSettings.setDatabaseEnabled(true); // Включение базы данных
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // Поддержка смешанного контента (HTTP+HTTPS)
webView.setWebChromeClient(new WebChromeClient());// Включение отображения JavaScript-алертов и других событий
// Установка WebViewClient для обработки всех переходов внутри WebView
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); // Обработка переходов внутри WebView
return true;
}
});
Чтоб если вы случайно кликнули по рекламе или просто вернутся на прошлую страницу без надобности перезапуска приложения надо написать обработчик назад.
Java: Скопировать в буфер обмена
Код:
@Override
public void onBackPressed() {
WebView webView = findViewById(R.id.webview);
// Обработка кнопки "Назад" для возврата к предыдущей странице
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
Тут просто в новом классе прописано WebView webView = findViewById(R.id.webview) что предопределяет для чего будет работать метод, который вызывается, когда пользователь нажимает кнопку "Назад" на своём устройстве Android.
Настройки Прилоежния
Как и любому Android приложению этому нужно получать разрешения для работы, а именно для этого оно нужно всего 1. Это доступ к Интернету, его нужно прописать в файле manifests/AndroidManifest.xml после <manifest.
Разрешение:
XML: Скопировать в буфер обмена
<uses-permission android:name="android.permission.INTERNET" />
как это должно выглядеть:
Посмотреть вложение 98880
На это в целом всё если вас интересует открытие напрем форумов или чего-то подобного но если вы хотите смотреть видео то:
Поддержка полноэкранного режима для видео:
Если вы хотите внутри приложения открывать видео хостинг например YouTube то чтоб просматривать в нём видео в полноэкранном режиме недостаточно то что было написано ранее, нужно дописать ещё некоторый код:
- Переменные для управления полноэкранным режимом
- Обработка перехода в полноэкранный режим и выхода из него
- Обработка кнопки "Назад" для выхода из полноэкранного режима
- Задать конфигурацию активности для поддержки полноэкранного режима
Java: Скопировать в буфер обмена
Код:
private View customView;
private WebChromeClient.CustomViewCallback customViewCallback;
private ViewGroup mainContainer;
- customView: Представление, которое будет полноэкранным (например, видео).
- customViewCallback: Коллбэк для вызова при выходе из полноэкранного режима.
- mainContainer: Контейнер активности для добавления полноэкранного представления.
Полноэкранный режим настраивается с помощью методов WebChromeClient:
Java: Скопировать в буфер обмена
Код:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
// Переход в полноэкранный режим
if (customView != null) {
callback.onCustomViewHidden();
return;
}
customView = view;
customViewCallback = callback;
mainContainer.addView(customView);
webView.setVisibility(View.GONE);
}
@Override
public void onHideCustomView() {
// Выход из полноэкранного режима
if (customView == null) {
return;
}
mainContainer.removeView(customView);
customView = null;
webView.setVisibility(View.VISIBLE);
customViewCallback.onCustomViewHidden();
}
});
- onShowCustomView(View view, WebChromeClient.CustomViewCallback callback):
- Этот метод вызывается, когда WebView переходит в полноэкранный режим (например, при воспроизведении видео).
- view — это вид, отображаемый в полноэкранном режиме.
- callback — используется для уведомления, когда представление должно быть скрыто.
- В этом методе текущий вид WebView скрывается (webView.setVisibility(View.GONE)), и вместо него добавляется полноэкранное представление customView в mainContainer.
- onHideCustomView():
- Этот метод вызывается при выходе из полноэкранного режима.
- Полноэкранное представление удаляется из mainContainer с помощью mainContainer.removeView(customView).
- customView сбрасывается, и стандартный WebView снова становится видимым (webView.setVisibility(View.VISIBLE)).
Этот код нужен для того, чтобы при нажатии кнопки "Назад" пользователь мог выйти из полноэкранного режима:
Java: Скопировать в буфер обмена
Код:
@Override
public void onBackPressed() {
// Обработка возврата из полноэкранного режима
if (customView != null) {
onHideCustomView();
} else if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
- Если customView не равен null, значит, мы находимся в полноэкранном режиме. Метод onHideCustomView() используется для выхода из этого режима.
- Если WebView может вернуться на предыдущую страницу (например, есть история), то выполняется переход назад.
- Если же нет ни customView, ни истории, вызывается стандартное поведение кнопки "Назад" с помощью super.onBackPressed().
Для того чтоб это надо дописать в AndoidManifest.xml внутри <activity прописать активности для поддержки полноэкранного режима:
XML: Скопировать в буфер обмена
Код:
android:configChanges="orientation|screenSize"
android:hardwareAccelerated="true">
Как это должно выглядеть:
Чтоб вам не пришлось собирать всё почестям оставляю фулл код для всех файлов:
main_avtivity.xml:
XML: Скопировать в буфер обмена
Код:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity:
Java: Скопировать в буфер обмена
Код:
package com.example.nbsp;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private String websiteUrl = "https://rt.pornhub.com/"; // Укажите URL вашего сайта
private WebView webView;
private View customView;
private WebChromeClient.CustomViewCallback customViewCallback;
private ViewGroup mainContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webview);
mainContainer = findViewById(android.R.id.content);
// Настройки WebView
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // Включение JavaScript
webSettings.setDomStorageEnabled(true); // Включение поддержки хранения DOM
webSettings.setDatabaseEnabled(true); // Включение базы данных
webSettings.setAllowFileAccess(true); // Доступ к файлам
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // Поддержка смешанного контента (HTTP+HTTPS)
// Включение JavaScript-алертов и обработка событий, включая полноэкранный режим
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
// Переход в полноэкранный режим
if (customView != null) {
callback.onCustomViewHidden();
return;
}
customView = view;
customViewCallback = callback;
mainContainer.addView(customView);
webView.setVisibility(View.GONE);
}
@Override
public void onHideCustomView() {
// Выход из полноэкранного режима
if (customView == null) {
return;
}
mainContainer.removeView(customView);
customView = null;
webView.setVisibility(View.VISIBLE);
customViewCallback.onCustomViewHidden();
}
});
// Установка WebViewClient для обработки всех переходов внутри WebView
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); // Обработка переходов внутри WebView
return true;
}
});
// Загрузка начального URL
webView.loadUrl(websiteUrl);
}
@Override
public void onBackPressed() {
// Обработка возврата из полноэкранного режима
if (customView != null) {
onHideCustomView();
} else if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
AndroidManifest.xml:
XML: Скопировать в буфер обмена
Код:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nbsp">
<!-- Разрешения для доступа в интернет и проверки состояния сети -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat">
<!-- MainActivity - поддержка полноэкранного режима и ориентации -->
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
android:hardwareAccelerated="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Для тех кто не разбирается в программирование или что-то не получается я пишу билд который будет делать всё сам, постараюсь зарелизить в течение пары дней.
Ну и на этом уже реально всё, большое спасибо за внимание. В комментариях с удовольствием по отвечаю на вопросы