zoukankan      html  css  js  c++  java
  • ReactNative之Android打包APK方法(趟坑过程)

    欢迎大家加群讨论
    点击链接加入群[ReactNative-解决问题交流群] :644124441
    点击链接加入群[ReactNative技术交流群2] :687663534

    多余的不解释了。直接上车吧。中途遇到的问题我也写出来了(其实和官网教程相似但也有不同不然我也不会写出来了):遇到问题可以留言

    1、生成签名秘钥:

    你可以用keytool命令生成一个私有密钥。在Windows上keytool命令放在JDK的bin目录中(比如C:Program FilesJavajdkx.x.x_xin),
    你可能需要在命令行中先进入那个目录才能执行此命令。

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

    这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些发行相关的信息。最后它会生成一个叫做my-release-key.keystore的密钥库文件。
    在运行上面这条语句之后,密钥库里应该已经生成了一个单独的密钥,有效期为10000天。--alias参数后面的别名是你将来为应用签名时所需要用到的,所以记得记录这个别名。
    注意:请记得妥善地保管好你的密钥库文件,不要上传到版本库或者其它的地方。

    2、设置gradle变量:

    my-release-key.keystore文件放到你工程中的android/app文件夹下。
    编辑~/.gradle/gradle.properties(没有这个文件你就创建一个),添加如下的代码(注意把其中的****替换为相应密码)
    注意:~表示用户目录,比如windows上可能是C:Users用户名,而mac上可能是/Users/用户名

    MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
    MYAPP_RELEASE_KEY_ALIAS=my-key-alias
    MYAPP_RELEASE_STORE_PASSWORD=*****
    MYAPP_RELEASE_KEY_PASSWORD=*****
    

    上面的这些会作为全局的gradle变量,我们在后面的步骤中可以用来给应用签名。

    3、添加签名到应用的gradle配置中:

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

    ...
    android {
        ...
        defaultConfig { ... }
        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 {
                ...
                signingConfig signingConfigs.release
            }
        }
    }
    ...
    

    我是这样写的,

     signingConfigs { 
           release { 
            storeFile file("/Users/zhaopengsong/Desktop/RichMedia1/android/app/my-release-key.keystore")
            storePassword "123456"
            keyAlias "my-key-alias"
            keyPassword "123456"
        }
         }
    

    4、生成release版本的APK:

    现在可以生成签名版的APK 了:进入项目的根目录,在终端运行React Native 包管理器:
    $ npm start
    然后根目录在次运行下列命令:

    $  mkdir -p android/app/src/main/assets
    $ curl -k "http://localhost:8081/index.android.bundle" >android/app/src/main/assets/index.android.bundle  
    $ cd android && ./gradlew assembleRelease
    

    解释:首先我们新建了一个assets目录来存储打包的JavaScript文件然后通过curlReactNative包管理器中获取JavaScript文件。最后使用gradlew来构建release版本的APK

    5、在设备上安装release版本的APK(以上完成之后我用的Android Studio打包的)

     
    image.png

    在项目的android/目录下运行 ./gradlew installRelease
    好啦完成了。如果你这样打包还出错建议在第四步的时候可以用AndroidStudio进行打包。遇到问题可以看这个来解决

    二打包离线Bundle

    打包步骤

    在工程根目录下执行打包命令,

    React-native bundle --entry-file index.android.js --bundle-output ./android/app/src/main/assets/index.android.jsbundle --platform android --assets-dest ./android/app/src/main/res/ --dev false
    
    
    注意: 
    1、[./android/app/src/main/assets/]文件夹必须存在,不存在就new一个assets文件夹,不然会报一个错误:
    
    ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle'
    
    
    2、./android/app/这个路径一定要准确
    
    执行完毕后:
    
     
    image.png

    打包apk文件

    到你rn项目的根目录下执行:(或者直接使用Androidstudio打包就可以)
    cd android && ./gradlew assembleRelease
    好啦~ 如果没有错的话,就说明apk文件打包完成了,然后到你的这个目录下:
    /android/app/build/outputs/apk
    免责声明:所有信息来源于网络和自己开发中的一点总结。如果有不妥希望指出我会改。

                                                                               --ZPengs
    

    相关文章:
    1.React Native开发错误警告处理总结(已解决 !持续更新)
    2.ReactNative 实现的文件上传功能(实测可行!)
    3.React Native开发总结之:开发技巧和调试技巧
    4.React Native开发总结:一、开发环境配置
    5.Android 调试错误总结(ReactNative开发)(持续更新)
    6.ReactNative开发之真机测试
    7React Native开发之iOS打包ipa发布(亲测可行)



    作者:ZPengs
    链接:https://www.jianshu.com/p/1380d4c8b596
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    引用原文:https://www.jianshu.com/p/1380d4c8b596

    写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!

    如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

  • 相关阅读:
    安装JDK,如何配置PATH,如何配置CLASSPATH
    存储过程笔记
    用BeanFactoryAware接口,用BEAN的名称来获取BEAN对象
    静态工厂实例代码
    setTimeout 和 setInterval 的区别
    Spring Autowire自动装配
    动态工厂模式代码实例
    JS处理回车事件
    不错的Spring学习笔记(转)
    单例模式要点
  • 原文地址:https://www.cnblogs.com/summary-2017/p/8626640.html
Copyright © 2011-2022 走看看