react native 很好用,项目完成需要打包上线哦!好吧 那~就签名打包上线喽… 当前的react-native 项目代码基于"react": "~15.4.0-rc.4","react-native": "0.41.0", 打开我的挚爱AS,你会发现build过程很慢,而且耐心等待其build完成之后,还是错误的…. 因为在react-native-0.41.0 版本下>>> - android/build.gradle中'classpath 'com.android.tools.build:gradle:1.3.1' - android/gradle/wrapper/gradle-wrapper.properties中'distributionUrl=.../gradle-2.4-all.zip'
而我们的AS基本上是很高的版本,并且就是依照这种低版本进行build,结果也许不会令你满意~ 所以,干脆!就升级版本吧,下面是我升级过的版本,且编译运行都通过。无论是在AS或者WebStorm上面 在app下的gradle文件中compileSdkVersion 、buildToolsVersion 、minSdkVersion 和targetSdkVersion 依然保持原来的版本。通过build之后,一切回归于正常。
如何生成可发布的apk?
1-生成Android签名证书
打包apk,我们必须是要使用签名证书的,该签名证书我们可以从AS上获得,从新生成一个新的xxx.jks 拿到签名证书之后,拷贝到android/app目录 下即可。
2-设置gradle变量
由上图看,设置gradle变量,即编辑android/gradle.properties文件内容。添加下面代码
MYAPP_RELEASE_STORE_FILE=lushan2017.jks ##签名证书全名
MYAPP_RELEASE_KEY_ALIAS=lushan2017 ##签名证书全名别名
MYAPP_RELEASE_STORE_PASSWORD=lushan2017
MYAPP_RELEASE_KEY_PASSWORD=lushan2017
然后覆盖在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 {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"),"proguard-rules.pro"
signingConfig signingConfigs.release
}
}
...
3-打包apk
在AS中点击执行Build/Generate Signed Apk... 编译然后运行到手机上,你会发现….打开即崩溃。。不能正常运行在手机上!!为什么呢,奇诡? 既然apk 在AS 下编译的不能运行在手机上,那么就到WebStorm 上编译出一个apk比较下。在WebStorm Terminal终端 执行命令gradlew assembleRelease 结果爆出问题'gradlew'不是内部或外部命令,也不是可运行的程序或批处理文件。 ,说明gradle命令 在这里无法执行,也就是说明在本机中没有配置gradle 的环境变量。此时就需要到高级系统设置/环境变量/系统变量 进行配置。
新建系统变量 <下面是我个人的> 变量名(N)=GRADLE_HOME ; 变量值(V)=C:UsersYJH.gradlewrapperdistsgradle-3.3-all55gk2rcmfc6p2dg9u9ohc3hw9gradle-3.3 至于变量值内容,你可以打开你的AS边拿到变量值。然后添加到系统变量的变量Path 中,以方式%GRADLE_HOME%bin 加入即可。 Webstorm中再次执行编译打包apk命令 注意:切换到你的android目录下执行签名打包命令 之后,就能看到编译成功的提示。然后在webstorm 中路径android/app/outputs/apk/app-release.apk 就能看到已成功签名打包的文件。 安装到手机运行成功。但是为什么在AS打包的apk文件却不能运行呢? 为了证明点什么,需要分别比较一下她们各自生成的apk 进入AS打包签名的apk 进入Webstorm打包签名的apk 第一反应看到的是,apk包大小竟然不一样。分别进入apk包中分析包内有什么不同
通过深入剖析,可以看到使用AS进行签名打包的apk 中比使用Webstorm进行签名打包的apk 少了一个文件夹assets 。而在assets文件夹中是bundle文件 。该bundle文件就是我们所编写的打包的js文件。 在开发环境下,每次启动APP,都会连接JS Server 将项目中编写的js文件代码加载到APP(React Native的动态更新)。 签名打包后的apk 变成了生产环境 ,无法在启动的时候连接JS Server加载相应的js文件。导致APP因缺少相应的js而无法启动 。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|