0%

react native 爬坑记录

记录下react native 爬的坑

《一》base-64 编码转换

使用第三方模块base-64
git地址:https://github.com/mathiasbynens/base64

1
$npm install base-64

引入

1
2
var base64 = require('base-64');
var encodedData = base64.encode(input);

《二》安卓打包

主流程见react native官网:http://reactnative.cn/docs/0.48/signed-apk-android.html#content
以下步骤需注意:

a.当前文件的操作权限是否可用,最好在android studio的命令行里敲打包命令。
b.npm start的服务要是开启状态

步骤:
1.进入java/jdk/bin生成key

1
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

2.把my-release-key.keystore文件放到你工程中的android/app文件夹下。

3.编辑你项目目录下的android/app/build.gradle,添加如下的签名配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
signingConfigs {
release {
keyAlias "com.xxx"
keyPassword "xxxx"
storeFile file("my-release-key.keystore")
storePassword "xxxx"
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}

4.建议用android studio打包,也可以按下面的步骤来。


4.修改混淆文件:proguard-rules.pro
最后加上(启动混淆后需清空缓存 Android Studio Build > Clean Project, 否则可能会报错。):

1
2
-keep class android.text {* ;}
-dontwarn android.text.*

5.打包

1
$./gradlew assembleRelease

《三》Error:Could not expand ZIP *.aar

出现这种情况一般是权限问题,删除报错的build文件夹。

1
cd android && gradlew clean && cd .. && react-native run-android

《四》项目启动后,APP空白

检查依赖包是否安装正确,这里要注意cnpm安装的不一定对,最好使用最新的npm装。
升级npm

1
npm i -g npm@latest

设置npm代理地址,命令如下:

1
npm config set registry http://registry.cnpmjs.org

《五》react native中settimeout在调试模式下无效

这个是一个小坑,代码里有请求超时的设置,但是在chrome调试时咋都不起作用,最终定位问题是因为我设备的时间和调试PC的时间不一致。RN调取的时间差不对。

《六》Android键盘把tabbar顶起&&禁止横屏

修改安卓的xml配置:

1
2
3
4
<activity
...
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">