我认为很难找到如何解决这个问题的完整指南。我是这样解决的,从头到尾,为了能够在 Windows 上的模拟 Android 设备上运行 Create React App:
首先创建一个 React 应用程序或使用您现有的应用程序。
npx create-react-app my-app
https://github.com/facebook/create-react-app#creating-an-app
然后安装cordova:
npm install -g cordova
https://cordova.apache.org/docs/en/latest/guide/cli/
my-app
在我的例子中,在文件夹内创建一个新的cordova应用程序:
cordova create hello com.example.hello HelloWorld
将目录更改为hello
或您称为 Cordova 应用程序的名称。
cordova platform add ios
cordova platform add android
运行cordova requirements
以查看构建项目所需的内容。
因为我使用的是 Windows,所以在这个例子中我只会为 Android 构建它。
cordova platform remove ios
并确认我只有 Android cordova platform ls
根据cordova requirements
命令安装你需要的东西。因为我是全新安装的,所以我需要一切:Java 开发工具包 (JDK) 8、Gradle 和 Android SDK。链接可以在这里找到:
https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#requirements-and-support
或者:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
https://gradle.org/install/
https://developer.android.com/studio/index.html
安装后打开Android Studio。我选择了标准安装,但失败并显示以下警告:
无法安装英特尔 HAXM。详情请查看安装日志:“C:\Users\Oscar\AppData\Local\Temp\haxm_log.txt” Intel® HAXM 安装失败。要安装英特尔® HAXM,请按照以下说明进行操作:https ://software.intel.com/android/articles/installation-instructions-for-intel-hardware-accelerated-execution-manager-windows
安装程序日志位于
C:\Users\Oscar\AppData\Local\Temp\haxm_log.txt 安装程序日志内容: === Logging started: 2020-07-10 16:39:27 === 这台计算机不支持 Intel Virtualization Technology (VT- x) 或者它专门由 Hyper-V 使用。无法安装 HAXM。请确保在 Windows 功能中禁用 Hyper-V,或参阅英特尔 HAXM 文档了解更多信息。
然而,我无论如何都可以启动应用程序并添加在配置下找到的 Android 虚拟设备 (AVD)。
我选择添加一个Pixel XL
带有R
系统映像。
但是cordova requirements
再次运行我可以看到我需要一个 API 级别为 28 的 Android 目标。R 是级别 30。
因此Pie
,我安装了 API 级别 28 x86_64 并创建了一个新的虚拟设备。
AVD Manager
我没有打开SDK manager
,而是打开并下载了 Android 9.0 Pie SDK。
现在一切看起来都不错:
然后运行cordova emulate android
以测试默认的 Cordova 应用程序。
如果它有效,它应该是这样的:
将目录更改为my-app
.
在依赖package.json
项"homepage": "./",
之前编辑和添加:
感谢@BlackBeard。来源:https : //stackoverflow.com/a/46785362/3850405
跑 npm run build
清除所有内容,my-app\hello\www
然后将所有内容复制my-app\build
到my-app\hello\www
。
瞧:
如果您不进行编辑my-app
package.json
和添加"homepage": "./",
,它将如下所示:
得到教训:
1.
如果您<Router>
在项目中使用,请将其更改为<HashRouter>
否则您将看到空白显示,因为屏幕上不会呈现任何内容。适用于 iOS 和 Android。
来源:https :
//stackoverflow.com/a/46785362/3850405
2.
您需要一个白名单来允许 URL。从文档:
默认情况下,只允许导航到 file:// URL。要允许其他 URL,您必须在 config.xml 中添加标签:
https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/
像这样安装:
cordova plugin add cordova-plugin-whitelist
然后编辑config.xml
位于应用程序根目录中的 which 并添加以下任何一项:
<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />
<!-- Wildcards are allowed for the protocol, as a prefix
to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />
<!-- A wildcard can be used to whitelist the entire network,
over HTTP and HTTPS.
*NOT RECOMMENDED* -->
<allow-navigation href="*" />
来源:https : //stackoverflow.com/a/30327204/3850405
3.
即使您使用的是白名单,您可能仍然需要访问不支持 https 的 http API。默认情况下这是不允许的,可能会导致一些真正的头痛。通过编辑config.xml
并在下面添加以下内容来解决此问题<platform name="android">
:
<edit-config xmlns:android="http://schemas.android.com/apk/res/android" file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application"> <application android:usesCleartextTraffic="true" /></edit-config>
鉴于您没有浏览到 URL,任何 API 调用都必须指定实际服务器。我通常使用 Axios,所以我们只需要将我们的服务器添加到默认 URL。例子:
import axios, { AxiosPromise, AxiosRequestConfig, Method } from 'axios';
const getConfig = (url: string, method: Method, params?: any, data?: any) => {
const config: AxiosRequestConfig = {
url: 'http://192.168.1.249' + url,
method: method,
responseType: 'json',
params: params,
data: data,
headers: { 'X-Requested-With': 'XMLHttpRequest' },
}
return config;
}
export const sendRequest = (url: string, method: Method, params?: any, data?: any): AxiosPromise<any> => {
return axios(getConfig(url, method))
}
然后像这样调用:
const path = '/api/test/'
export const initialLoad = (number: number): AxiosPromise<InitialLoadDto> => {
return sendRequest(path + 'InitialLoad/' + number, 'get');
}