前言:一直传言Windows不适合Coder,集成完Code-push之后,真心明白了。特此记录踩坑集锦。
1、code-push具体的集成过程,自己看官方文档,这里不赘述,比较简单
http://microsoft.github.io/code-push/
2、Application中切记替换Production or Staging的Key
在code-push document中提到了在Application中的getPackages()中list.add(new CodePush(“development-key-here”, Application.this, BuildConfig.DEBUG))。
3、Code-push推荐是在index.js中的componentDidMount()方法中调用Codepush.sync()方法,别忘了加
4、集成好了Code push后的Windows平台上的神坑
当集成好了之后,由于Code-push只能在Production or Staging环境中才能使用,所以需要配置一下签名信息(这个简单,不多说),然后打一个Release包即可。这里出问题了:
(1)、直接使用gradlew assembleRelease之后,会出现找不到node_modules/script/xxxxxx.js的问题,这个问题是Windows平台下的路径引起的。修改方式为:进入到react-native-code-push/android/codepush.gradle文件,找到nodeModulesPath,通过看gradle文件的代码可以知道,要么配置到properties文件中,要么直接修改。这里直接修改:
if (project.hasProperty('nodeModulesPath')) {
nodeModulesPath = project.nodeModulesPath
} else {
nodeModulesPath = "你的项目路径/node_modules";//这里我直接使用了绝对路径,主要是用相对路径会找不到,有点莫名其妙
}
(2)、当你修改了(1)之后,又会在bundleReleaseJsAndAssets这里出现问题。提示为Failed to capture snapshot of input files for task ‘bundleReleaseJsAndAssets’ during up-to-date check.同时还会提示你.gradle/xxxxx/xxxxx/cache.properties.lock文件无法进行MD5处理。这里的主要问题是将.gradle文件夹下的所有文件都排除出去即可。.gradle文件是在build过程中生成的文件,主要用来存放一些临时性的如MD5的Hash值等文件信息,这里排除掉没有问题。
进入到node_modules/react-native/react.gradle文件中,修改如下文件:
/*这里原来是file(../../)但是在Windows平台下会定位错,根据目录层级来看,确实需要向上两层到project的根目录,但是用../就正常,有点莫名其妙 或者直接使用绝对路径 如D:/Project/HotRNTest,直接定位到该project的根路径*/
def reactRoot = elvisFile(config.root) ?: file("../")
//def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
//这里添加.gradle文件夹下的所有文件 均被excludes掉 task通过
def inputExcludes = [".gradle/**","android/**", "ios/**"]
这里code-push的集成比较简单,但是主要在集成了code-push之后,在Windows上打个release包进入坑中,在不断的解决各种问题。关于路径的问题,后续再继续跟进,如果有合理的写法或者答案,会及时更新。