{"id":20178,"date":"2025-06-19T14:04:39","date_gmt":"2025-06-19T06:04:39","guid":{"rendered":"https:\/\/mnya.tw\/cc\/?p=20178"},"modified":"2025-06-19T14:26:40","modified_gmt":"2025-06-19T06:26:40","slug":"2497","status":"publish","type":"post","link":"https:\/\/mnya.tw\/cc\/word\/2497.html","title":{"rendered":"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01"},"content":{"rendered":"<p>\u9019\u7bc7\u6559\u5b78\u6703\u5e36\u4f60\u7528 Flutter \u70ba <b>example.com<\/b> \u5efa\u7acb\u4e00\u500b\u5c08\u5c6c\u7684 APP\u3002\u4f60\u53ea\u8981\u6703\u4e00\u9ede\u57fa\u672c\u7a0b\u5f0f\u64cd\u4f5c\uff0c\u5c31\u80fd\u8ddf\u8457\u505a\u51fa\u81ea\u5df1\u7684\u300c\u7db2\u7ad9 APP\u300d\u3002\u6211\u5011\u6703\u4e00\u6b65\u4e00\u6b65\u4ecb\u7d39 <b>Flutter\uff08Dart \u8a9e\u8a00\uff09<\/b>\u3001<b>WebView<\/b> \u7684\u6982\u5ff5\uff0c\u4e26\u5e36\u4f60\u4e86\u89e3\u5efa\u7acb\u5c08\u6848\u3001\u8a2d\u5b9a APP \u5716\u793a\u3001\u7ba1\u7406\u5957\u4ef6\u3001\u4fee\u6539 Android \u6b0a\u9650\u7684\u4e00\u4e9b\u91cd\u9ede\uff0c\u6700\u5f8c\u6703\u5b8c\u6574\u8b1b\u89e3 <code>main.dart<\/code> \u7684\u5beb\u6cd5\uff0c\u89c0\u5ff5\u9ede\u901a\u4e86\uff0c\u901f\u5ea6\u5c31\u5feb\u4e86\uff01<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg\" width=\"1024\" height=\"768\" \/><\/p>\n<h2><span style=\"color: #3366ff;\">\u4ec0\u9ebc\u662f Flutter\uff1f\u4ec0\u9ebc\u662f Dart\uff1f<\/span><\/h2>\n<p>Flutter \u662f Google \u63a8\u51fa\u7684\u8de8\u5e73\u53f0 UI \u6846\u67b6\uff0c\u53ea\u8981\u5beb\u4e00\u6b21\u7a0b\u5f0f\uff0c\u5c31\u80fd\u540c\u6642\u7522\u751f Android\u3001iOS\u3001Web \u7684 APP\u3002\u5b83\u7684\u8a9e\u8a00\u53eb\u505a Dart\uff0c\u8a9e\u6cd5\u8ddf JavaScript\u3001Java \u6709\u9ede\u50cf\uff0c\u5f88\u9069\u5408\u7528\u4f86\u5feb\u901f\u958b\u767c\u6f02\u4eae\u7684\u624b\u6a5f APP\u3002\u62ff\u4f86\u958b\u767c\u7c21\u6613\u7684 Android APP \u53c8\u5feb\u53c8\u6709\u6548\u7387\uff0c\u7a0d\u4f5c\u4fee\u6539\u99ac\u4e0a\u4e5f\u80fd\u958b\u767c iOS \u5c08\u7528\u7684 APP\uff0c\u4e0d\u904e\u672c\u6587\u4e0d\u5c0d\u9019\u90e8\u5206\u89e3\u8aaa\u3002<\/p>\n<h2><span style=\"color: #3366ff;\">\u4ec0\u9ebc\u662f WebView\uff1f<\/span><\/h2>\n<p>WebView \u5c31\u662f\u300c\u628a\u7db2\u7ad9\u756b\u9762\u5305\u9032 APP \u88e1\u300d\u7684\u4e00\u7a2e\u65b9\u5f0f\u3002APP \u6703\u50cf\u700f\u89bd\u5668\u4e00\u6a23\u986f\u793a\u4f60\u6307\u5b9a\u7684\u7db2\u5740\uff0c\u4f60\u7684\u7db2\u7ad9\u600e\u9ebc\u66f4\u65b0\u3001APP \u88e1\u5c31\u8ddf\u8457\u8b8a\u3002\u4e0d\u9700\u91cd\u5beb APP \u5167\u5bb9\uff0c\u7dad\u8b77\u4e5f\u8d85\u65b9\u4fbf\u3002<\/p>\n<h2><span style=\"color: #0000ff;\">1. \u958b\u59cb\u5efa\u7acb Flutter \u5c08\u6848<\/span><\/h2>\n<p>\u9996\u5148\u4f60\u8981\u5148\u5b89\u88dd\u597d <a href=\"https:\/\/docs.flutter.dev\/get-started\/install\" target=\"_blank\" rel=\"noopener\">Flutter \u958b\u767c\u74b0\u5883<\/a>\u3002\u5b89\u88dd\u597d\u5f8c\uff0c\u5728\u7d42\u7aef\u6a5f\u8f38\u5165\u4e0b\u5217\u6307\u4ee4\u5efa\u7acb\u65b0\u5c08\u6848\uff08\u8acb\u628a <code>my_webapp<\/code> \u63db\u6210\u4f60\u8981\u7684\u5c08\u6848\u540d\u7a31\uff09\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">flutter create my_webapp<\/code><\/pre>\n<p>\u9032\u5165\u5c08\u6848\u8cc7\u6599\u593e\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">cd my_webapp<\/code><\/pre>\n<h2><span style=\"color: #0000ff;\">2. \u88fd\u4f5c\u8207\u653e\u7f6e APP \u5716\u793a<\/span><\/h2>\n<p>APP \u4e00\u5b9a\u8981\u6709\u81ea\u5df1\u7684\u5716\u793a\u3002\u53ef\u4ee5\u7528 <a href=\"https:\/\/appicon.co\/\" target=\"_blank\" rel=\"noopener\">AppIcon \u5de5\u5177<\/a> \u6216 Figma\u3001Photoshop \u88fd\u4f5c APP \u5716\u793a\u3002<\/p>\n<p>\u63a5\u8457\uff0c\u628a\u751f\u6210\u597d\u7684 Android \u5716\u793a\uff0c\u4f9d\u7167\u76ee\u9304\u5206\u985e\u653e\u9032 <code>android\/app\/src\/main\/res\/<\/code> \u76ee\u9304\u5e95\u4e0b\uff0c\u6703\u6709 <code>mipmap-hdpi<\/code>\u3001<code>mipmap-mdpi<\/code> \u7b49\u5b50\u76ee\u9304\uff08\u6bcf\u500b\u5b50\u76ee\u9304\u90fd\u662f\u4e0d\u540c\u89e3\u6790\u5ea6\u7528\u7684\uff09\u3002<\/p>\n<h2><span style=\"color: #0000ff;\">3. \u7ba1\u7406\u5957\u4ef6\uff08pubspec.yaml\uff09<\/span><\/h2>\n<p>\u63a5\u8457\u6211\u5011\u8981\u7528\u5230\u5169\u500b\u91cd\u8981\u5957\u4ef6\uff1a<\/p>\n<ul>\n<li><b>flutter_inappwebview<\/b>\uff1aWebView \u5143\u4ef6\uff0c\u6bd4\u5b98\u65b9\u7684 webview \u66f4\u5f37\u5927\u3002<\/li>\n<li><b>url_launcher<\/b>\uff1a\u7528\u4f86\u8655\u7406\u8df3\u8f49\u5916\u90e8\u700f\u89bd\u5668\u7684\u60c5\u5883\u3002<\/li>\n<\/ul>\n<p>\u6253\u958b <code>pubspec.yaml<\/code>\uff0c\u52a0\u5165\u4ee5\u4e0b\u5167\u5bb9\uff08\u7248\u672c\u8acb\u67e5\u8a62\u6700\u65b0\uff09\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">dependencies:\r\n  flutter:\r\n    sdk: flutter\r\n  flutter_inappwebview: ^6.0.0\r\n  url_launcher: ^6.1.11\r\n<\/code><\/pre>\n<p>\u52a0\u5b8c\u5f8c\u57f7\u884c\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">flutter pub get<\/code><\/pre>\n<h2><span style=\"color: #0000ff;\">4. \u4fee\u6539 Android \u6b0a\u9650\uff08AndroidManifest.xml\uff09<\/span><\/h2>\n<p>\u8981\u8b93 APP \u80fd\u5b58\u53d6\u7db2\u8def\uff0c\u4e00\u5b9a\u8981\u5728 <code>android\/app\/src\/main\/AndroidManifest.xml<\/code> \u4e2d <b>&lt;application&gt;<\/b> \u6a19\u7c64\u524d\u9762\u52a0\u5165\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">&lt;uses-permission android:name=\"android.permission.INTERNET\" \/&gt;<\/code><\/pre>\n<p>\u9019\u6a23 APP \u624d\u80fd\u6b63\u78ba\u8f09\u5165\u7db2\u9801\u3002<\/p>\n<h2><span style=\"color: #0000ff;\">5. \u7de8\u5beb\u4e3b\u7a0b\u5f0f <code>lib\/main.dart<\/code><\/span><\/h2>\n<p>\u4ee5\u4e0b\u662f\u5b8c\u6574\u7684\u4e3b\u7a0b\u5f0f\u7bc4\u4f8b\uff0c\u88e1\u9762\u6703\u5e36\u4f60\u7406\u89e3\u6bcf\u500b\u90e8\u4efd\u7684\u7528\u6cd5\uff1a<\/p><div class=\"3a456c955cc9861673f62d33beb7714e\" data-index=\"2\" style=\"float: none; margin:0px;\">\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2683739050533486\"\r\n     crossorigin=\"anonymous\"><\/script>\r\n<ins class=\"adsbygoogle\"\r\n     style=\"display:block; text-align:center;\"\r\n     data-ad-layout=\"in-article\"\r\n     data-ad-format=\"fluid\"\r\n     data-ad-client=\"ca-pub-2683739050533486\"\r\n     data-ad-slot=\"3270345536\"><\/ins>\r\n<script>\r\n     (adsbygoogle = window.adsbygoogle || []).push({});\r\n<\/script>\n<\/div>\n\n<pre class=\"line-numbers\"><code class=\"language-dart\">import 'dart:async';\r\nimport 'dart:io';\r\nimport 'package:flutter\/material.dart';\r\nimport 'package:flutter_inappwebview\/flutter_inappwebview.dart';\r\nimport 'package:url_launcher\/url_launcher.dart';\r\n\r\nFuture&lt;void&gt; main() async {\r\n  WidgetsFlutterBinding.ensureInitialized();\r\n  if (Platform.isAndroid) {\r\n    await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);\r\n  }\r\n  runApp(\r\n    MaterialApp(\r\n      theme: ThemeData(\r\n        primarySwatch: Colors.deepBlue,\r\n        primaryColor: Colors.cyan[800],\r\n        scaffoldBackgroundColor: Colors.black,\r\n        canvasColor: Colors.black,\r\n        cardColor: Colors.grey[850],\r\n      ),\r\n      home: const MyApp(),\r\n      debugShowCheckedModeBanner: false,\r\n    ),\r\n  );\r\n}\r\n\r\nclass MyApp extends StatefulWidget {\r\n  const MyApp({super.key});\r\n  @override\r\n  State&lt;MyApp&gt; createState() =&gt; _MyAppState();\r\n}\r\n\r\nclass _MyAppState extends State&lt;MyApp&gt; {\r\n  final GlobalKey webViewKey = GlobalKey();\r\n  InAppWebViewController? webViewController;\r\n  String url = \"\";\r\n  double progress = 0;\r\n\r\n  InAppWebViewGroupOptions options = InAppWebViewGroupOptions(\r\n    crossPlatform: InAppWebViewOptions(\r\n      useShouldOverrideUrlLoading: true,\r\n      mediaPlaybackRequiresUserGesture: false,\r\n      incognito: false,\r\n      cacheEnabled: true,\r\n    ),\r\n    android: AndroidInAppWebViewOptions(\r\n      useHybridComposition: true,\r\n      thirdPartyCookiesEnabled: true,\r\n    ),\r\n    ios: IOSInAppWebViewOptions(\r\n      allowsInlineMediaPlayback: true,\r\n      sharedCookiesEnabled: true,\r\n    ),\r\n  );\r\n\r\n  late PullToRefreshController pullToRefreshController;\r\n\r\n  @override\r\n  void initState() {\r\n    super.initState();\r\n    pullToRefreshController = PullToRefreshController(\r\n      options: PullToRefreshOptions(color: Colors.cyan[800]),\r\n      onRefresh: () async {\r\n        if (Platform.isAndroid) {\r\n          webViewController?.reload();\r\n        } else if (Platform.isIOS) {\r\n          webViewController?.loadUrl(\r\n            urlRequest: URLRequest(url: await webViewController?.getUrl()),\r\n          );\r\n        }\r\n      },\r\n    );\r\n  }\r\n\r\n  @override\r\n  Widget build(BuildContext context) {\r\n    return Scaffold(\r\n      body: SafeArea(\r\n        child: Stack(\r\n          children: [\r\n            InAppWebView(\r\n              key: webViewKey,\r\n              initialUrlRequest: URLRequest(\r\n                url: WebUri(\"https:\/\/example.com\/\"),\r\n              ),\r\n              initialOptions: options,\r\n              pullToRefreshController: pullToRefreshController,\r\n              onWebViewCreated: (controller) {\r\n                webViewController = controller;\r\n              },\r\n              onLoadStart: (controller, url) {\r\n                setState(() {\r\n                  this.url = url.toString();\r\n                });\r\n              },\r\n              androidOnPermissionRequest:\r\n                  (controller, origin, resources) async {\r\n                    return PermissionRequestResponse(\r\n                      resources: resources,\r\n                      action: PermissionRequestResponseAction.GRANT,\r\n                    );\r\n                  },\r\n              shouldOverrideUrlLoading: (controller, navigationAction) async {\r\n                var uri = navigationAction.request.url!;\r\n                final whitelist = ['example.com'];\r\n\r\n                if ([\"http\", \"https\"].contains(uri.scheme)) {\r\n                  bool isWhitelisted = whitelist.any((host) {\r\n                    return uri.host == host || uri.host.endsWith('.$host');\r\n                  });\r\n\r\n                  if (isWhitelisted) {\r\n                    return NavigationActionPolicy.ALLOW;\r\n                  } else {\r\n                    if (await canLaunchUrl(uri)) {\r\n                      await launchUrl(\r\n                        uri,\r\n                        mode: LaunchMode.externalApplication,\r\n                      );\r\n                    }\r\n                    return NavigationActionPolicy.CANCEL;\r\n                  }\r\n                }\r\n                \/\/ \u5176\u5b83\u5354\u5b9a\u4e00\u5f8b\u5141\u8a31\r\n                return NavigationActionPolicy.ALLOW;\r\n              },\r\n              onLoadStop: (controller, url) async {\r\n                pullToRefreshController.endRefreshing();\r\n                setState(() {\r\n                  this.url = url.toString();\r\n                });\r\n              },\r\n              onLoadError: (controller, url, code, message) {\r\n                pullToRefreshController.endRefreshing();\r\n              },\r\n              onProgressChanged: (controller, progress) {\r\n                if (progress == 100) {\r\n                  pullToRefreshController.endRefreshing();\r\n                }\r\n                setState(() {\r\n                  this.progress = progress \/ 100;\r\n                });\r\n              },\r\n              onUpdateVisitedHistory: (controller, url, androidIsReload) {\r\n                setState(() {\r\n                  this.url = url.toString();\r\n                });\r\n              },\r\n              onConsoleMessage: (controller, consoleMessage) {\r\n                debugPrint(consoleMessage.toString());\r\n              },\r\n            ),\r\n\r\n            \/\/ \u8f09\u5165\u9032\u5ea6\u689d\r\n            if (progress &lt; 1.0)\r\n              Positioned(\r\n                top: 0,\r\n                left: 0,\r\n                right: 0,\r\n                child: LinearProgressIndicator(value: progress),\r\n              ),\r\n          ],\r\n        ),\r\n      ),\r\n    );\r\n  }\r\n}<\/code><\/pre>\n<h3><span style=\"color: #ff6600;\">\u7a0b\u5f0f\u89e3\u8aaa<\/span><\/h3>\n<ul>\n<li><b>main()<\/b>\uff1aFlutter \u5165\u53e3\u9ede\u3002\u8a2d\u5b9a APP \u4e3b\u984c\u984f\u8272\u3001\u555f\u7528 WebView Debug\uff08\u65b9\u4fbf Android \u958b\u767c\uff09\u3002<\/li>\n<li><b>MyApp<\/b>\uff1a\u4e3b\u756b\u9762 Widget\uff0c\u63a1\u7528 StatefulWidget \u53ef\u96a8\u6642\u66f4\u65b0\u7db2\u9801\u72c0\u614b\u3002<\/li>\n<li><b>InAppWebViewGroupOptions<\/b>\uff1a\u9019\u88e1\u8a2d\u5b9a WebView \u884c\u70ba\uff0c\u50cf\u662f\u5426\u555f\u7528\u5feb\u53d6\u3001\u5141\u8a31\u591a\u5a92\u9ad4\u81ea\u52d5\u64ad\u653e\u3001Cookie \u7ba1\u7406\u7b49\u7b49\u3002<\/li>\n<li><b>PullToRefreshController<\/b>\uff1a\u63d0\u4f9b\u4e0b\u62c9\u91cd\u65b0\u6574\u7406\u529f\u80fd\uff0c\u7b26\u5408 APP \u4f7f\u7528\u7fd2\u6163\u3002<\/li>\n<li><b>build()<\/b>\uff1aAPP \u756b\u9762\u7d50\u69cb\uff0c\u4e3b\u9ad4\u5c31\u662f\u4e00\u500b <code>InAppWebView<\/code>\uff0c\u986f\u793a <code>https:\/\/example.com\/<\/code>\u3002<\/li>\n<li><b>onWebViewCreated<\/b>\uff1aWebView \u5efa\u7acb\u6642\u628a\u63a7\u5236\u5668\u8a18\u9304\u4e0b\u4f86\u3002<\/li>\n<li><b>shouldOverrideUrlLoading<\/b>\uff1a\u7db2\u5740\u767d\u540d\u55ae\u5224\u65b7\uff0c\u53ea\u6709 example.com \u7684\u7db2\u9801\u624d\u6703\u5728 APP \u5167\u958b\uff0c\u5176\u5b83\u7db2\u7ad9\u6703\u8df3\u5916\u90e8\u700f\u89bd\u5668\u3002<\/li>\n<li><b>onLoadStart\/onLoadStop\/onLoadError\/onProgressChanged<\/b>\uff1a\u9019\u5e7e\u500b\u662f\u76e3\u63a7\u7db2\u9801\u8f09\u5165\u72c0\u614b\u3001\u63a7\u5236\u9032\u5ea6\u689d\u7684\u3002<\/li>\n<li><b>androidOnPermissionRequest<\/b>\uff1aAndroid \u7db2\u9801\u5982\u6709\u9ea5\u514b\u98a8\u3001\u76f8\u6a5f\u7b49\u6b0a\u9650\u6703\u81ea\u52d5\u5141\u8a31\uff08\u4f60\u53ef\u81ea\u884c\u52a0\u5f37\u6b0a\u9650\u63a7\u5236\uff09\u3002<\/li>\n<li><b>\u9032\u5ea6\u689d<\/b>\uff1a\u7576\u7db2\u9801\u8f09\u5165\u672a\u5b8c\u6210\uff0c\u986f\u793a\u5728\u756b\u9762\u9802\u7aef\u3002<\/li>\n<\/ul>\n<h2><span style=\"color: #0000ff;\">6. \u8a2d\u5b9a\u91d1\u9470\uff08Key\uff09\u76f8\u95dc\u4e8b\u9805<\/span><\/h2>\n<p>\u7576\u4f60\u6253\u7b97\u5c07 Flutter APP \u767c\u4f48\u5230 Google Play\uff0c\u5fc5\u9808\u8981\u6709\u4e00\u7d44\u7c3d\u7ae0\u91d1\u9470\u4f86\u9032\u884c AAB \u6a94\u6848\u7684\u7c3d\u540d\u3002\u9019\u90e8\u5206\u4e3b\u8981\u8207 <b>Android<\/b> \u76f8\u95dc\u3002<br \/>\n\u4f60\u53ef\u4ee5\u4f7f\u7528\u4e0b\u5217\u6307\u4ee4\u7522\u751f\u81ea\u5df1\u7684\u91d1\u9470\uff08\u5047\u8a2d\u4f60\u5df2\u7d93\u5b89\u88dd\u597d <code>keytool<\/code>\uff0c\u901a\u5e38\u96a8 Java JDK \u4e00\u8d77\u5b89\u88dd\uff09\uff1a<\/p>\n<pre><code>\r\nkeytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias\r\n<\/code><\/pre>\n<p>\u9019\u689d\u6307\u4ee4\u6703\u8981\u6c42\u4f60\u8f38\u5165\u5bc6\u78bc\u4e26\u5efa\u7acb\u4e00\u500b <code>my-release-key.jks<\/code> \u6a94\u6848\uff08\u53ef\u81ea\u884c\u6539\u540d\uff09\uff0c\u8a18\u5f97\u5bc6\u78bc\u548c\u5225\u540d\uff08alias\uff09\u8981\u7262\u8a18\u4e14\u59a5\u5584\u5132\u5b58\u3002<br \/>\n\u7136\u5f8c\u5c07\u91d1\u9470\u6a94\u653e\u5728\u5c08\u6848\u6839\u76ee\u9304\u4e0b\uff0c\u63a5\u8457\u5728 <code>android\/app<\/code> \u76ee\u9304\u5167\u5efa\u7acb\u6216\u7de8\u8f2f <code>key.properties<\/code> \u6a94\u6848\uff0c\u5167\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">storePassword=\u4f60\u7684\u5bc6\u78bc\r\nkeyPassword=\u4f60\u7684\u5bc6\u78bc\r\nkeyAlias=my-key-alias\r\nstoreFile=..\/my-release-key.jks<\/code><\/pre>\n<p>\u6700\u5f8c\uff0c\u7de8\u8f2f <code>android\/app\/build.gradle<\/code>\uff0c\u5728 <code>android { ... }<\/code> \u5340\u584a\u52a0\u4e0a\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">signingConfigs {\r\n    release {\r\n        if (project.hasProperty('KEYSTORE_PASSWORD')) {\r\n            storeFile file(KEYSTORE_FILE)\r\n            storePassword KEYSTORE_PASSWORD\r\n            keyAlias KEY_ALIAS\r\n            keyPassword KEY_PASSWORD\r\n        } else if (project.hasProperty('storePassword')) {\r\n            storeFile file(storeFile)\r\n            storePassword storePassword\r\n            keyAlias keyAlias\r\n            keyPassword keyPassword\r\n        }\r\n    }\r\n}\r\nbuildTypes {\r\n    release {\r\n        signingConfig signingConfigs.release\r\n        minifyEnabled false\r\n        shrinkResources false\r\n        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\r\n    }\r\n}<\/code><\/pre>\n<p>\u9019\u6a23\u6bcf\u6b21\u4f60\u6253\u5305\u5c31\u6703\u81ea\u52d5\u4f7f\u7528\u4f60\u8a2d\u5b9a\u597d\u7684\u91d1\u9470\u6a94\u6848\u9032\u884c\u7c3d\u7ae0\uff0c\u8b93\u4f60\u7684 APP \u53ef\u4ee5\u5b89\u5168\u4e0a\u67b6\u5230 Google Play\u3002<\/p>\n<p>\u5982\u679c\u4f60\u9084\u6c92\u8981\u4e0a\u67b6\uff0c\u53ef\u4ee5\u5148\u8df3\u904e\u9019\u4e00\u6b65\uff0c\u65e5\u5f8c\u518d\u88dc\u4e5f\u6c92\u95dc\u4fc2\uff0c\u4f46\u5343\u842c\u8a18\u5f97\u300c\u91d1\u9470\u6a94\u8981\u5099\u4efd\u597d\u300d\uff0c\u4e00\u65e6\u907a\u5931\uff0c\u672a\u4f86\u66f4\u65b0 APP \u6703\u9047\u5230\u5927\u9ebb\u7169\uff01<\/p>\n<h2><span style=\"color: #0000ff;\">7. \u57f7\u884c\u8207\u9664\u932f<\/span><\/h2>\n<p>\u73fe\u5728\u53ef\u4ee5\u9023\u63a5 Android \u624b\u6a5f\u6216\u7528\u6a21\u64ec\u5668\uff0c\u76f4\u63a5\u57f7\u884c\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">flutter run<\/code><\/pre>\n<p>\u5982\u679c\u6709\u9047\u5230\u554f\u984c\uff0c\u53ef\u53c3\u8003\u7d42\u7aef\u6a5f\u8a0a\u606f\u6216 Flutter \u5b98\u7db2\u5c0b\u6c42\u5354\u52a9\u3002<\/p>\n<p>\u6700\u5f8c\u53ef\u4ee5\u628a APP \u6253\u5305\u4e26\u4e0a\u67b6 Google Play\uff01<\/p>\n<p>AAB\uff08\u4e0a\u67b6 Google Play \u5c08\u7528\uff09\u8207 APK \u7684\u6253\u5305\u6307\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">flutter build appbundle --release\r\nflutter build apk --release<\/code><\/pre>\n<h2><span style=\"color: #3366ff;\">\u7e3d\u7d50<\/span><\/h2>\n<p>\u900f\u904e Flutter + WebView\uff0c\u4f60\u53ef\u4ee5\u8d85\u5feb\u901f\u5730\u5c07\u81ea\u5df1\u7684\u7db2\u7ad9\u5305\u6210\u539f\u751f APP\uff0c\u800c\u4e14\u5f8c\u7e8c\u7dad\u8b77\u53ea\u8981\u7ba1\u7406\u7db2\u7ad9\u672c\u8eab\u5c31\u597d\uff0c\u975e\u5e38\u9069\u5408 MVP\u3001\u5167\u90e8\u7cfb\u7d71\u3001\u6d3b\u52d5\u578b\u7db2\u7ad9\u4f7f\u7528\u3002\u5982\u679c\u4f60\u60f3\u9032\u968e\uff0c\u9084\u53ef\u4ee5\u6574\u5408\u66f4\u591a\u539f\u751f\u529f\u80fd\u6216\u5ba2\u88fd UI\u3002\u6b61\u8fce\u8a66\u8a66\u770b\uff0c\u958b\u555f\u4f60\u7684 Flutter APP \u958b\u767c\u4e4b\u8def\u5427\uff01<\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>\u9019\u7bc7\u6559\u5b78\u6703\u5e36\u4f60\u7528 Flutter \u70ba example.com \u5efa\u7acb\u4e00\u500b\u5c08\u5c6c\u7684 APP\u3002\u4f60\u53ea\u8981\u6703\u4e00\u9ede\u57fa\u672c\u7a0b\u5f0f\u64cd\u4f5c\uff0c\u5c31\u80fd\u8ddf\u8457\u505a\u51fa\u81ea\u5df1\u7684\u300c\u7db2\u7ad9 APP\u300d\u3002\u6211\u5011\u6703\u4e00\u6b65\u4e00\u6b65\u4ecb\u7d39 Flutter\uff08 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20179,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[481,14,38,569,518],"tags":[],"class_list":["post-20178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-os","category-code","category-android","category-dart","category-app-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01 - \u840c\u82bd\u7d9c\u5408\u5929\u5730 - \u840c\u82bd\u7db2\u9801<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mnya.tw\/cc\/word\/2497.html\" \/>\n<meta property=\"og:locale\" content=\"zh_TW\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01 - \u840c\u82bd\u7d9c\u5408\u5929\u5730 - \u840c\u82bd\u7db2\u9801\" \/>\n<meta property=\"og:description\" content=\"\u9019\u7bc7\u6559\u5b78\u6703\u5e36\u4f60\u7528 Flutter \u70ba example.com \u5efa\u7acb\u4e00\u500b\u5c08\u5c6c\u7684 APP\u3002\u4f60\u53ea\u8981\u6703\u4e00\u9ede\u57fa\u672c\u7a0b\u5f0f\u64cd\u4f5c\uff0c\u5c31\u80fd\u8ddf\u8457\u505a\u51fa\u81ea\u5df1\u7684\u300c\u7db2\u7ad9 APP\u300d\u3002\u6211\u5011\u6703\u4e00\u6b65\u4e00\u6b65\u4ecb\u7d39 Flutter\uff08Dart \u8a9e\u8a00\uff09 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mnya.tw\/cc\/word\/2497.html\" \/>\n<meta property=\"og:site_name\" content=\"\u840c\u82bd\u7d9c\u5408\u5929\u5730\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-19T06:04:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-19T06:26:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"\u840c\u82bd\u7ad9\u9577\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/x.com\/qwe987299\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005:\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u840c\u82bd\u7ad9\u9577\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9810\u4f30\u95b1\u8b80\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\u9418\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html\"},\"author\":{\"name\":\"\u840c\u82bd\u7ad9\u9577\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/#\\\/schema\\\/person\\\/28e9ae25bc418b8ec216b7aa2c848faa\"},\"headline\":\"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01\",\"datePublished\":\"2025-06-19T06:04:39+00:00\",\"dateModified\":\"2025-06-19T06:26:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html\"},\"wordCount\":120,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/wp-content\\\/uploads\\\/2025\\\/2497.jpg\",\"articleSection\":[\"\u884c\u52d5\u5e73\u53f0\",\"\u7a0b\u5f0f\u8a2d\u8a08\",\"Android\",\"Dart\",\"APP\u958b\u767c\"],\"inLanguage\":\"zh-TW\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html\",\"url\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html\",\"name\":\"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01 - \u840c\u82bd\u7d9c\u5408\u5929\u5730 - \u840c\u82bd\u7db2\u9801\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/wp-content\\\/uploads\\\/2025\\\/2497.jpg\",\"datePublished\":\"2025-06-19T06:04:39+00:00\",\"dateModified\":\"2025-06-19T06:26:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/#\\\/schema\\\/person\\\/28e9ae25bc418b8ec216b7aa2c848faa\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#breadcrumb\"},\"inLanguage\":\"zh-TW\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-TW\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#primaryimage\",\"url\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/wp-content\\\/uploads\\\/2025\\\/2497.jpg\",\"contentUrl\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/wp-content\\\/uploads\\\/2025\\\/2497.jpg\",\"width\":1024,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/2497.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\\\/\\\/mnya.tw\\\/cc\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/#website\",\"url\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/\",\"name\":\"\u840c\u82bd\u7d9c\u5408\u5929\u5730\",\"description\":\"\u751f\u6d3b\u4f11\u9592\u2502\u96fb\u5b50\u8cc7\u8a0a\u2502\u5b78\u8853\u77e5\u8b58\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-TW\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/#\\\/schema\\\/person\\\/28e9ae25bc418b8ec216b7aa2c848faa\",\"name\":\"\u840c\u82bd\u7ad9\u9577\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-TW\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c63875472a671bb4fd1e3a1012e8ef8bb9672b41d7810b61f508a42ad15ef16a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c63875472a671bb4fd1e3a1012e8ef8bb9672b41d7810b61f508a42ad15ef16a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c63875472a671bb4fd1e3a1012e8ef8bb9672b41d7810b61f508a42ad15ef16a?s=96&d=mm&r=g\",\"caption\":\"\u840c\u82bd\u7ad9\u9577\"},\"description\":\"\u60a8\u597d\uff0c\u6211\u662f\u840c\u82bd\u7cfb\u5217\u7db2\u7ad9\uff08Mnya Series Website\uff09\u7684\u7ad9\u9577&amp;\u5275\u59cb\u4eba\uff0c\u53ef\u4ee5\u7a31\u547c\u6211\u300c\u840c\u82bd\u7ad9\u9577\u300d\u3002\u6211\u7684\u8208\u8da3\u8207\u5c08\u9577\u6709\u767b\u5c71\u3001\u89c0\u5bdf\u5730\u5f62\u3001\u651d\u5f71\u3001\u65c5\u904a\u3001\u7db2\u9801\u8a2d\u8a08\uff06\u67b6\u8a2d\uff06\u7d93\u71df\u3001\u52d5\u756b\u88fd\u4f5c\u3001\u5716\u7247\u8655\u7406\u3001\u8cc7\u6599\u5f59\u6574\u7b49\u3002\u6709\u4efb\u4f55\u554f\u984c\u6216\u5efa\u8b70\u8acb\u81f3\u840c\u82bd\u8ad6\u58c7\u767c\u8868\u3002\u7db2\u7ad9\u696d\u52d9\u3001\u5546\u696d\u5408\u4f5c\u7684\u806f\u7d61\u65b9\u5f0f\u5728\u300c\u95dc\u65bc\u672c\u7ad9 \u2192 \u5718\u968a\u4ecb\u7d39 \u2192 \u7ad9\u9577\u4ecb\u7d39\u300d\uff0c\u5f88\u9ad8\u8208\u8a8d\u8b58\u60a8\uff01\u8acb\u591a\u6307\u6559\uff01\",\"sameAs\":[\"https:\\\/\\\/mnya.tw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/x.com\\\/qwe987299\"],\"url\":\"https:\\\/\\\/mnya.tw\\\/cc\\\/word\\\/author\\\/qwe987299\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01 - \u840c\u82bd\u7d9c\u5408\u5929\u5730 - \u840c\u82bd\u7db2\u9801","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mnya.tw\/cc\/word\/2497.html","og_locale":"zh_TW","og_type":"article","og_title":"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01 - \u840c\u82bd\u7d9c\u5408\u5929\u5730 - \u840c\u82bd\u7db2\u9801","og_description":"\u9019\u7bc7\u6559\u5b78\u6703\u5e36\u4f60\u7528 Flutter \u70ba example.com \u5efa\u7acb\u4e00\u500b\u5c08\u5c6c\u7684 APP\u3002\u4f60\u53ea\u8981\u6703\u4e00\u9ede\u57fa\u672c\u7a0b\u5f0f\u64cd\u4f5c\uff0c\u5c31\u80fd\u8ddf\u8457\u505a\u51fa\u81ea\u5df1\u7684\u300c\u7db2\u7ad9 APP\u300d\u3002\u6211\u5011\u6703\u4e00\u6b65\u4e00\u6b65\u4ecb\u7d39 Flutter\uff08Dart \u8a9e\u8a00\uff09 [&hellip;]","og_url":"https:\/\/mnya.tw\/cc\/word\/2497.html","og_site_name":"\u840c\u82bd\u7d9c\u5408\u5929\u5730","article_published_time":"2025-06-19T06:04:39+00:00","article_modified_time":"2025-06-19T06:26:40+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg","type":"image\/jpeg"}],"author":"\u840c\u82bd\u7ad9\u9577","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/x.com\/qwe987299","twitter_misc":{"\u4f5c\u8005:":"\u840c\u82bd\u7ad9\u9577","\u9810\u4f30\u95b1\u8b80\u6642\u9593":"2 \u5206\u9418"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#article","isPartOf":{"@id":"https:\/\/mnya.tw\/cc\/word\/2497.html"},"author":{"name":"\u840c\u82bd\u7ad9\u9577","@id":"https:\/\/mnya.tw\/cc\/#\/schema\/person\/28e9ae25bc418b8ec216b7aa2c848faa"},"headline":"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01","datePublished":"2025-06-19T06:04:39+00:00","dateModified":"2025-06-19T06:26:40+00:00","mainEntityOfPage":{"@id":"https:\/\/mnya.tw\/cc\/word\/2497.html"},"wordCount":120,"commentCount":0,"image":{"@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#primaryimage"},"thumbnailUrl":"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg","articleSection":["\u884c\u52d5\u5e73\u53f0","\u7a0b\u5f0f\u8a2d\u8a08","Android","Dart","APP\u958b\u767c"],"inLanguage":"zh-TW","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/mnya.tw\/cc\/word\/2497.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/mnya.tw\/cc\/word\/2497.html","url":"https:\/\/mnya.tw\/cc\/word\/2497.html","name":"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01 - \u840c\u82bd\u7d9c\u5408\u5929\u5730 - \u840c\u82bd\u7db2\u9801","isPartOf":{"@id":"https:\/\/mnya.tw\/cc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#primaryimage"},"image":{"@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#primaryimage"},"thumbnailUrl":"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg","datePublished":"2025-06-19T06:04:39+00:00","dateModified":"2025-06-19T06:26:40+00:00","author":{"@id":"https:\/\/mnya.tw\/cc\/#\/schema\/person\/28e9ae25bc418b8ec216b7aa2c848faa"},"breadcrumb":{"@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#breadcrumb"},"inLanguage":"zh-TW","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mnya.tw\/cc\/word\/2497.html"]}]},{"@type":"ImageObject","inLanguage":"zh-TW","@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#primaryimage","url":"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg","contentUrl":"https:\/\/mnya.tw\/cc\/wp-content\/uploads\/2025\/2497.jpg","width":1024,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/mnya.tw\/cc\/word\/2497.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/mnya.tw\/cc"},{"@type":"ListItem","position":2,"name":"Flutter \u904b\u7528 WebView \u70ba\u81ea\u5df1\u7684\u7db2\u7ad9\u958b\u767c Android APP \u5427\uff01"}]},{"@type":"WebSite","@id":"https:\/\/mnya.tw\/cc\/#website","url":"https:\/\/mnya.tw\/cc\/","name":"\u840c\u82bd\u7d9c\u5408\u5929\u5730","description":"\u751f\u6d3b\u4f11\u9592\u2502\u96fb\u5b50\u8cc7\u8a0a\u2502\u5b78\u8853\u77e5\u8b58","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mnya.tw\/cc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-TW"},{"@type":"Person","@id":"https:\/\/mnya.tw\/cc\/#\/schema\/person\/28e9ae25bc418b8ec216b7aa2c848faa","name":"\u840c\u82bd\u7ad9\u9577","image":{"@type":"ImageObject","inLanguage":"zh-TW","@id":"https:\/\/secure.gravatar.com\/avatar\/c63875472a671bb4fd1e3a1012e8ef8bb9672b41d7810b61f508a42ad15ef16a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c63875472a671bb4fd1e3a1012e8ef8bb9672b41d7810b61f508a42ad15ef16a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c63875472a671bb4fd1e3a1012e8ef8bb9672b41d7810b61f508a42ad15ef16a?s=96&d=mm&r=g","caption":"\u840c\u82bd\u7ad9\u9577"},"description":"\u60a8\u597d\uff0c\u6211\u662f\u840c\u82bd\u7cfb\u5217\u7db2\u7ad9\uff08Mnya Series Website\uff09\u7684\u7ad9\u9577&amp;\u5275\u59cb\u4eba\uff0c\u53ef\u4ee5\u7a31\u547c\u6211\u300c\u840c\u82bd\u7ad9\u9577\u300d\u3002\u6211\u7684\u8208\u8da3\u8207\u5c08\u9577\u6709\u767b\u5c71\u3001\u89c0\u5bdf\u5730\u5f62\u3001\u651d\u5f71\u3001\u65c5\u904a\u3001\u7db2\u9801\u8a2d\u8a08\uff06\u67b6\u8a2d\uff06\u7d93\u71df\u3001\u52d5\u756b\u88fd\u4f5c\u3001\u5716\u7247\u8655\u7406\u3001\u8cc7\u6599\u5f59\u6574\u7b49\u3002\u6709\u4efb\u4f55\u554f\u984c\u6216\u5efa\u8b70\u8acb\u81f3\u840c\u82bd\u8ad6\u58c7\u767c\u8868\u3002\u7db2\u7ad9\u696d\u52d9\u3001\u5546\u696d\u5408\u4f5c\u7684\u806f\u7d61\u65b9\u5f0f\u5728\u300c\u95dc\u65bc\u672c\u7ad9 \u2192 \u5718\u968a\u4ecb\u7d39 \u2192 \u7ad9\u9577\u4ecb\u7d39\u300d\uff0c\u5f88\u9ad8\u8208\u8a8d\u8b58\u60a8\uff01\u8acb\u591a\u6307\u6559\uff01","sameAs":["https:\/\/mnya.tw\/","https:\/\/x.com\/https:\/\/x.com\/qwe987299"],"url":"https:\/\/mnya.tw\/cc\/word\/author\/qwe987299"}]}},"_links":{"self":[{"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/posts\/20178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/comments?post=20178"}],"version-history":[{"count":0,"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/posts\/20178\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/media\/20179"}],"wp:attachment":[{"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/media?parent=20178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/categories?post=20178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mnya.tw\/cc\/wp-json\/wp\/v2\/tags?post=20178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}