@jameszuo
2015-10-27T14:21:16.000000Z
字数 5961
阅读 467
讲座/分享
如果在办公网,记得设置代理
$ npm config set proxy=http://proxy.tencent.com:8080
$ npm config delete registry
在 PATH
环境变量中增加 c:\Users\\AppData\Roaming\npm;
让 git 使用 https://
协议代替 git://
协议(公司代理不支持 git://
协议)
$ git config --global url."https://".insteadof git://
设置环境变量 JAVA_HOME
c:\path\of\jdk1.8.xx
在 PATH
环境变量中添加
;%JAVA_HOME%\bin\;
设置 java 的网络代理
java
并打开,在 常规 -> 网络设置
中设置使用代理服务器 proxy.tencent.com:8080
记得重新打开命令窗口
Android SDK Manager
配置使用公司镜像
Tools > Manage Add-on Sites > User Defined Sites > New
http://android-mirror.bugly.qq.com:8080/android/repository/addon.xml
Tools > Option > Http Proxy Server
server: android-mirror.bugly.qq.com
port: 8080
Packages > Reload 刷新列表
选中下列包
1. Tools / Android SDK Tools 24.3.4
3. Tools / Android SDK Platform-tools 23.0.1
2. Tools / Android SDK Build-tools 23.0.1
3. Android 6.0 (api 23) / SDK Platform
4. #Extras / Android Support Repository
点击 Install x Packages
开始安装
安装完成后设置环境变量 ANDROID_HOME
指向 Android SDK
的安装路径,如
d:\android\android-sdk
在 PATH
环境变量中添加 ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools\;%ANDROID_HOME%\build-tools\23.0.1\;
### 注意这里的版本号
android 官方模拟器性能并不好,而且配置略繁琐,建议使用 Genymotion 代替
注册 Genymotion 帐号
添加设备
Add
- 使用前面注册的帐号和密码进行登录
- 选择中意的 Android 版本和手机型号,点击 Next 安装
- 目前建议安装4.x版本,5.x版本无法运行在不支持 Intel虚拟化技术的CPU上
安装完成后点击 Start
启动
react-native-cli
命令行工具
安装
$ npm install -g react-native-cli
网速慢时建议手动安装
$ git clone https://github.com/facebook/react-native.git
$ cd react-native\react-native-cli
$ npm install -g
测试
$ react-native -v
npm.oa.com
上的 react-native
包有问题,不建议用
下载 WebStorm 并安装 —— 用于编写 js 代码
设置 javascript
语言类型为 jsx
设置 Javascript -> Libraries
Node.js Globals
使 WebStorm 能够正确理解 require('..')
添加 react-native
源码 到 Libraries
中
下载 IntelliJ Idea 并安装 —— 用于编写 java 代码
在启动界面点击 configuration
-> project structure
SDKs
-> 添加 Java SDK
和 Android SDK
Project
-> 选择添加的 Android SDK
配置完先放着,待会用
运行 $ react-native init <项目名称>
创建一个 react-native
工程,里面包含了 iOS
和 android
的子目录
执行:
react-native init ShowMeTheMoney
项目目录结构:
里面已经包含了我们需要用到的 iOS
、android
以及 js
代码,其中 ios
和 android
目录的结构不建议修改,但 js
你爱怎么玩怎么玩
这里有一个坑,执行完 react-native init xxx
以后,xxx/node_modules/react-native
已经安装上了,但是并没有生成 xxx/ios
和 xxx/android
两个目录,除非设置 npm config set logleve=debug
才可以生成
运行
Google Nexus 7 - 4.4.4
)package.json
(windows 下面并没有 shell) 在 工程目录
下启动调试用的 JS Server
$ npm start
另开命令窗口执行下面的命令,该命令会自动查找当前操作系统系统上已启动的虚拟设备和已连接的安卓设备,然后安装和运行 app
$ react-native run-android
第一次执行这个命令会自动下载 java 的 gradle
组件
如果运行正常,则会出现下面的界面
错误情况
没有可用的虚拟设备或物理设备
com.android.builder.testing.api.DeviceException: no connected devices!
启动设备即可
存在多个虚拟设备或物理设备
error: more than one device and emulator
确保只开启了一个设备
没有卸载旧的包
Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
一般出现在打 release 包时,react-native
发现设备上存在同名但签名不同的包,会提示冲突
执行 adb uninstall com.<项目名称>
卸载旧的包即可
没有签名
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
对 apk 进行签名即可
准备工作到这里就就绪了,是不是很辛苦?要知道,为了吃这口螃蟹,我也是操(cào)碎了心……
一个带按需渲染的滚动列表
class Main extends React.Component {
constructor(props) {
super(props);
var ds = new ListView.DataSource({
// 只渲染数据变化的行,返回true表示需要重新渲染行
rowHasChanged: (r1, r2)=> r1 !== r2
});
this.state = {
ds: ds.cloneWithRows(new Array(1000).join(' ').split(' ').map((x, i)=>i))
};
}
_renderRow(rowData) {
return (
<View style={styles.item}>
<Text style={styles.itemText}>{rowData}</Text>
</View>
);
}
render() {
return (
<ListView
dataSource={this.state.ds}
renderRow={this._renderRow.bind(this)}
pageSize={20}
onEndReachedThreshold={500}
/>
);
}
}
var styles = StyleSheet.create({
item: {
height: 60,
borderBottomWidth: 1,
borderBottomColor: '#ccc',
justifyContent: 'center'
},
itemText: {
textAlign: 'center'
}
});
reload js
即可。如果改动了 java
代码,则需要重新执行 react-native run-android
StyleSheet
// 声明
var styles = StyleSheet.create({
container: {
borderRadius: 4, // 不支持 border: 1px solid '#d6d7da'
borderWidth: 0.5, // 单位都是像素
borderColor: '#d6d7da',
},
title: {
fontSize: 19,
fontWeight: 'bold',
},
activeTitle: {
color: 'red',
},
});
// 使用
<View style={styles.container}>
{/*这里使用了样式覆盖,底层是 Object.assign()*/}
<Text style={[styles.title, this.props.isActive && styles.activeTitle]} />
</View>
native通信
ES6
Chrome
访问 http://localhost:8081/debugger-ui 打开调试器React Developer Tools
插件debugger-ui
并按 f12
打开 chrome dev tools
在 Sources
中找到你的 index.android.js
,设置断点试试吧
如果中午吃饭回来再调试的时候发现连不上调试器,那么试试关掉调试器重开
你可以在 Dev settings
里勾选 Auto reaload on js change
抓包
Fiddler
中添加 host
,如:在 app
的 Dev settings
中点击 Debug server host for device
,填写
jameszuo.local
还没完,还要在 android 设置
中开启 Wi-Fi 代理
在 cmd
执行命令 ipconfig
找到
以太网适配器 Virtualbox Host-Only Network:
...
ipv4 地址 . . . . . : 192.168.164.1 <--- 复制这个
...
长按 Wi-Fi WiredSSID
,点击 Modify network
需要注意的是 Debug server host for device
和 WiredSSID
要么同时设置,要么都不设置
LogCat
在工程目录下进行下列操作
android\app\src\main\assets
目录(如果不存在)http://localhost:8081/index.android.bundle?platform=android&dev=false&minify=true
到 android/app/src/main/assets
目录中打包 apk 文件
$ cd android
$ .\gradlew assembleRelease
$ del /q android\app\src\main\assets\*
$ cd ..
android\app\build\outputs\apk\
目录下生成 app-release-unsigned.apk
文件生成签名文件
只执行一次即可,生成以后每次打包可略过这一步
$ keytool -genkey -v -keystore <keystore文件路径> -alias <唯一别名> -keyalg RSA -validity 10000
例如
$ keytool -genkey -v -keystore .\android\tencent_vas_mqqgame.keystore -alias ShowMeTheMoney -keyalg RSA -validity 10000
对该 apk 文件进行签名 参考 Android Docs
$ jarsigner
-keystore <keystore文件路径>
-signedjar <未签名的apk文件路径> <签名后的apk文件路径>
<唯一别名>
例如:
$ jarsigner -keystore android/tencent_vas_mqqgame.keystore -signedjar android\app\build\outputs\apk\app-release-signed.apk android\app\build\outputs\apk\app-release-unsigned.apk ShowMeTheMoney
如出现 “警告 未提供 -tsa 或 -tsacert,” 可以忽略
对已签名的 apk 进行优化 参考 Android Docs
```
$ zipalign [-f] [-v] <alignment> infile.apk outfile.apk
```
例如:
$ zipalign -f -v 4 android\app\build\outputs\apk\app-release-signed.apk android\app\build\outputs\apk\app-release.apk
这时,你的 android\app\build\outputs\apk\
目录下应该有这几个文件
app-release.apk
app-release-signed.apk
app-release-unsigned.apk
其中 app-release.apk
就是要发布的文件,测试安装一下
adb uninstall com.ShowMeTheMoney && adb install android\app\build\outputs\apk\app-release.apk
TO BE CONTINUED...