【小米App】使用Android Studio开发直接打开Flask Web应用的安卓应用
·
使用Android Studio开发直接打开Flask Web应用的安卓应用
下面我将提供从零开始使用Android Studio开发一个直接打开Flask Web应用的安卓应用的完整指南,包括详细步骤和示例代码。
一、环境准备
1. 安装Android Studio
- 下载最新版Android Studio:官网下载地址
- 运行安装程序,选择"Standard"安装选项
- 安装完成后,启动Android Studio
- 在首次运行时安装必要的SDK组件
2. 配置开发环境
- 确保已安装以下SDK:
- Android SDK 30+
- Java Development Kit (JDK) 11+
- 在设置中检查Gradle版本(建议使用7.0+)
二、创建新项目
- 打开Android Studio,点击"Start a new Android Studio project"
- 选择"Empty Activity"模板
- 配置项目:
- Name: FlaskWebLauncher
- Package name: com.example.flaskweblauncher
- Language: Kotlin (推荐) 或 Java
- Minimum SDK: API 21 (Android 5.0)
- 点击"Finish",等待项目初始化完成
三、设计用户界面
1. 修改activity_main.xml
打开 res/layout/activity_main.xml,替换为以下代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_alignParentTop="true"
android:visibility="gone" />
</RelativeLayout>
2. 添加网络权限
打开 AndroidManifest.xml,在 <manifest> 标签内添加:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
同时修改 <application> 标签防止Cleartext HTTP流量问题:
<application
android:usesCleartextTraffic="true"
...>
...
</application>
四、编写业务逻辑
1. 修改MainActivity.kt
打开 MainActivity.kt,替换为以下代码:
import android.annotation.SuppressLint
import android.os.Bundle
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var webView: WebView
private val flaskUrl = "https://your-flask-app.com" // 替换为你的Flask应用URL
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
webView = findViewById(R.id.webView)
val progressBar = findViewById<ProgressBar>(R.id.progressBar)
// 配置WebView
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.loadWithOverviewMode = true
webView.settings.useWideViewPort = true
// 设置WebView客户端
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
progressBar.visibility = View.GONE
super.onPageFinished(view, url)
}
override fun onReceivedError(
view: WebView?,
errorCode: Int,
description: String?,
failingUrl: String?
) {
progressBar.visibility = View.GONE
// 这里可以添加错误处理逻辑
super.onReceivedError(view, errorCode, description, failingUrl)
}
}
// 设置进度条
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
if (newProgress < 100) {
progressBar.visibility = View.VISIBLE
progressBar.progress = newProgress
} else {
progressBar.visibility = View.GONE
}
}
}
// 加载Flask应用
webView.loadUrl(flaskUrl)
}
// 处理返回键,允许网页回退
override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack()
} else {
super.onBackPressed()
}
}
}
2. 添加网络安全性配置
- 在
res/xml/目录下创建network_security_config.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your-flask-app.com</domain>
</domain-config>
</network-security-config>
- 在
AndroidManifest.xml的<application>标签中添加:
android:networkSecurityConfig="@xml/network_security_config"
五、测试应用
1. 使用模拟器测试
- 点击工具栏中的"AVD Manager"
- 创建一个新的虚拟设备(建议选择Pixel系列)
- 启动模拟器
- 点击"Run"按钮(绿色三角形)运行应用
2. 使用真机测试
- 在手机上启用"开发者选项"(设置 > 关于手机 > 多次点击"版本号")
- 启用"USB调试"
- 通过USB连接电脑
- 在Android Studio中选择你的设备并运行
六、打包APK
1. 生成签名密钥
- 打开终端或命令行
- 导航到Java的bin目录(通常为
C:\Program Files\Java\jdkx.x.x_x\bin) - 运行以下命令:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
按照提示输入信息,这将生成一个签名密钥文件。
2. 配置Gradle进行签名
- 在项目根目录创建
keystore.properties文件:
storePassword=yourpassword
keyPassword=yourpassword
keyAlias=my-alias
storeFile=my-release-key.jks
- 在
app/build.gradle文件顶部添加:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('keystore.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
3. 生成发布版APK
- 点击菜单栏的"Build" > “Generate Signed Bundle / APK”
- 选择"APK"然后点击"Next"
- 选择你的密钥库文件并输入密码
- 选择"release"构建类型
- 点击"Finish"
生成的APK文件将位于:app/build/outputs/apk/release/app-release.apk
七、高级优化
1. 添加离线支持
修改 MainActivity.kt 添加离线缓存:
webView.settings.cacheMode = WebSettings.LOAD_DEFAULT
webView.settings.setAppCacheEnabled(true)
webView.settings.setAppCachePath(cacheDir.path)
2. 添加深色模式支持
在 res/values-night/themes.xml 中添加深色主题:
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.FlaskWebLauncher" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- 深色主题配置 -->
</style>
</resources>
3. 添加隐私政策
创建 res/raw/privacy_policy.html 并在 onCreate 中添加:
if (!isPrivacyPolicyAccepted()) {
showPrivacyPolicyDialog()
}
private fun showPrivacyPolicyDialog() {
val webView = WebView(this)
webView.loadUrl("file:///android_res/raw/privacy_policy.html")
AlertDialog.Builder(this)
.setView(webView)
.setPositiveButton("同意") { _, _ -> setPrivacyPolicyAccepted(true) }
.setNegativeButton("拒绝") { _, _ -> finish() }
.setCancelable(false)
.show()
}
八、Flask应用优化建议
from flask import Flask, Response
app = Flask(__name__)
@app.after_request
def add_header(response):
# 针对移动端优化响应头
response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '0'
response.headers['X-UA-Compatible'] = 'IE=Edge,chrome=1'
return response
@app.route('/')
def index():
# 添加移动端meta标签
return """
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask应用</title>
</head>
<body>
<!-- 你的应用内容 -->
</body>
</html>
"""
九、常见问题解决
-
WebView显示空白:
- 检查URL是否正确
- 确保Flask应用没有阻止WebView访问
- 在AndroidManifest中添加
android:usesCleartextTraffic="true"
-
APK安装失败:
- 确保手机允许"未知来源"安装
- 检查APK签名是否正确
-
页面加载慢:
- 优化Flask应用的响应速度
- 在WebView中启用缓存
-
HTTPS证书问题:
- 对于自签名证书,需要自定义WebViewClient处理:
webView.webViewClient = object : WebViewClient() {
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
handler?.proceed() // 仅限开发环境,生产环境应使用有效证书
}
}
通过以上步骤,你已经完成了一个专业的Flask Web应用启动器的开发,可以打包发布到各大应用商店。

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)