因为本身没有接触过移动端开发,因此选用了 React Native,毕竟任何可使用 JavaScript 来实现的应用都最终都会使用 JavaScript 实现 😄,因为本身没有 Mac 开发者帐号,因此只打包了安卓端javascript
React Native 安装环境的谜之复杂可能让你还没开始就要放弃
环境安装必定要按照官方文档的流程一步步来,切记!切记!切记!html
若是使用 window 做为开发环境,咱们只能开发 Android 应用。
必要的依赖:java
Node
须要 v12 版本以上JDK
必须是 1.8 版本或者 8 版本Android Studio
下载 Android Studio,安装界面 Custom 确认选中下列项:node
使用前的环境安装必定要按照官方文档来,否则后面出现各类异常让人直接想放弃使用,安装环境主要注意 Android Studio 的安装。react
若是使用 mac 开发,咱们能够开发 IOS 和 Android 两种应用。android
必要的依赖:ios
Node
须要 v12 版本以上watchman
是由 Facebook 提供的监视文件系统变动的工具。安装此工具能够提升开发时的性能(packager 能够快速捕捉文件的变化从而实现实时刷新)Xcode
能够在 App Store 找到直接下载CocoaPods
注意:nginx
cocoapods
安装可能须要墙工具,若是没有墙可翻,须要多尝试,或者在夜生人静的时候再次尝试,还不行能够直联本身的手机网络再次尝试,还不行的话,尝试这篇文章的方法pod install
进入 ios
目录,执行 pod install
抛出异常git
这个也是因为依赖包须要墙工具致使网络异常,尝试使用手机网络后可能抛出github
在项目中执行 sudo xcode-select --switch /Applications/Xcode.app
后,再次执行 pod install
以上安装推荐使用手机网络,若是下载异常,多试几回,多试几回,多试几回,直到安装成功
当咱们安装完上面一系列的环境后,若是一块儿顺利的话,咱们就能够准备初始项目,跑起来一个 Hello World
咱们运行项目前须要打开 android 模拟器
npx create-react-native-app rn-project cd rn-project yarn android
第一运行项目,编译时间可能会比较长,若是一切顺利会弹出一个 cmd 框,这个运行项目的时候是不能关闭的,它是一个 node 监听服务。
模拟器上出现界面
恭喜你万里长征已经走了一半了!
启动命令编译时抛出异常
须要咱们找到 Android Studio 安装目录下 jre 目录
设置系统变量 JAVA_HOME
对应的 PATH 路径须要添加两条记录
%JAVA_HOME%\bin %JAVA_HOME%\jre\bin
从新打开 cmd 运行成功
抛出异常
在 android 目录下查看 local.properties
文件,没有本身新建一个,指定 android sdk
安装目录
sdk.dir=E\:\\androidsdk
{province ? <Text className="province">{province}</Text> : null}
这里使用的开发平台是 Window 环境
React Native 调试可使用 Android Studio
自带的模拟器
也可使用第三方模拟器;这里选用雷电模拟器
链接模拟器
win + r
而后打开 cmd
adb connect 127.0.0.1:5555
yarn android
若是出现 adb 不是命令,须要添加环境变量,找到 Android Studio JDK
安装目录下 platform-tools
目录
点击更多 -> 摇一摇 -> debug
全部的调式均可以打开地址 http://localhost:8081/debugger-ui/ 来进行查看
这里指 Android 手机
yarn android
项目成功启动后会在手机上看到启动的程序,若是须要调试,须要摇一摇手机能够看到弹框
选择 Debug 利用 Chrome 调试
这个 debugger 插件很强大。
使用:
Android Studio
模拟器中的 Nexus S
,由于这个模型是有菜单键的,高版本的模拟器一般没有。Ctrl+M
也能够打开菜单栏。查了大半资料,建议仍是使用 nginx 作反向代理处理
React Native 因为并不支持 CSS3 动画,因此咱们实现动画效果须要使用其内置的 Animated
库
提供两种类型值,其能够绑定到样式获其它属性上
Animated.Value()
用于单个值Animated.ValueXY()
用于矢量值Animated
提供了三种动画类型。每种动画类型都提供了特定的函数曲线,用于控制动画值从初始值变化到最终值的变化过程:
Animated.decay()
指定的初始速度开始变化,而后变化速度愈来愈慢直至停下。[Animated.spring()](https://reactnative.cn/docs/animated#spring)
提供了一个基础的弹簧物理模型.Animated.timing()
使用 easing 函数 让数值随时间动起来。大多数状况下你应该使用 timing()
。默认状况下,它使用对称的 easeInOut 曲线,将对象逐渐加速到全速,而后经过逐渐减速中止结束。
经过调用 start()
函数启动动画。
start
函数能够传入回调函数,动画完成时通知调用{ finished: true }
stop
函数结束,回调值 { finished: false }
能够经过 createAnimatedComponent
来封装任意 React 组件,使其动画化
Animated.Image
Animated.ScrollView
Animated.Text
Animated.View
实现效果
直接上代码
import React, {useRef, useEffect} from 'react'; import {View, StyleSheet, Animated, Easing} from 'react-native'; const Loading = () => { let spinAnim = useRef(new Animated.Value(0)); const loadingAnim = () => { Animated.timing(spinAnim.current, { toValue: 1, duration: 1500, easing: Easing.linear, useNativeDriver: true, }).start(({finished}) => { if (finished) { spinAnim.current.setValue(0); loadingAnim(); } }); }; useEffect(() => { loadingAnim(); }); //映射 0-1 的值 映射 成 0 - 360 度 const spin = spinAnim.current.interpolate({ inputRange: [0, 1], //输入值 outputRange: ['0deg', '360deg'], //输出值 }); return ( <View style={Styles.loading}> <View style={Styles.loader}> <Animated.View style={[ Styles.loaderBall, { transform: [{rotate: spin}], }, ]}> <View style={Styles.loaderBallHook} /> </Animated.View> </View> </View> ); }; const Styles = StyleSheet.create({ loading: { width: '100%', height: '70%', display: 'flex', justifyContent: 'center', alignItems: 'center', }, loader: { display: 'flex', justifyContent: 'center', alignItems: 'center', height: 35, width: 35, borderRadius: 35, backgroundColor: '#FE9727', }, loaderBall: { position: 'relative', height: 30, width: 30, borderRadius: 30, // animation: spin 2s ease infinite, }, loaderBallHook: { position: 'absolute', zIndex: 1, left: 5, top: 5, height: 7, width: 7, backgroundColor: '#fff', borderRadius: 7, }, }); export default Loading;
Android 打包参考 官方网站流程
能够按照谷歌文档对应生成便可。这里要注意的是可能有些 Android Studio
没有 Generate signed apk
这个选项,这里须要咱们点击 File ->选择如图 Sync Project with Gradle Files
选项
而后能够在 Build
项看到 Generate signed apk
除了使用 Android Studio
自动生成证书,也能够执行命令来生成证书
keytool -genkey -v -keystore myApp.keystore -alias myApp.keystore -keyalg RSA -validity 30000
参数含义
参数 | 含义 |
---|---|
keytool | 工具名称(固定写法) |
)-genkey | 执行的是生成数字证书操做(固定写法) |
-v | 打印生成证书的详细信息 |
-keystore myApp.keystore | 生成的证书的文件名为"myApp.keystore"(根据需求,设置你的证书名) |
alias myApp.keystore | 证书的别名为"myApp.keystore"。 |
(通常和上面的文件名相同,能够不一样,但要记好,签名时会用(A)) | |
-keyalg RSA | 生成密钥文件采用的算法为RSA(固定写法) |
-validity 3000 | 该数字证书的有效期为30000天,30000天以后该证书将失效 |
按照提示一步步执行便可
最后生成了密钥证书
/android/app/
目录下gradle.properties
文件MYAPP_RELEASE_STORE_FILE=myApp.keystore MYAPP_RELEASE_KEY_ALIAS=myApp.keystore MYAPP_RELEASE_STORE_PASSWORD=123456 MYAPP_RELEASE_KEY_PASSWORD=123456
修改 android/app/build.gradle
signingConfigs { ... release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release ... } }
修改 /android/app/src/main/res/values/strings.xml
文件
<resources> <string name="app_name">应用名称</string> </resources>
将下列目录下的图标替换成须要的 Icon 便可,推荐使用 Android Studio
自带的 image-asset-studio 工具
进入 /android
根目录执行命令 ./gradlew assembleRelease
成功后能够在 /android/app/build/outputs/apk
目录下找到打包后的 apk
文件
能够手动安装至安卓真机
Error: Cannot create directory ..\mergeDebugResources\merged.dir\values
执行命令
cd android ./gradlew clean cd .. yarn android
总的来讲,开发仍是很适应,不过前面的环境安装是实在有点劝退啊😄,欢迎你们下载安卓端试试