关于ionic4打包Android发布版(release)签名过程及发布版无法访问服务器IP

项目从开始部署以来遇到了大大小小各种问题总结一下:

1、浏览器跨域问题

关于前端跨域问题解决办法

2、打包Android测试包后不允许明文(HTTP请求转换为HTTPS)

关于Android8以上不允许明文传输(即HTTP请求转换为HTTPS请求)的方法

3、服务端部署后客户端访问不到服务端IP(最坑就是这里,以前用阿里云和腾讯云可以直接访问IP,但是在电信云控制台有个安全组需要设置入口和出口IP以及端口号,之后绑定服务器实例即可访问)

关于ionic4打包Android发布版(release)签名过程及发布版无法访问服务器IP_第1张图片

4项目部署后MySQL数据库在Linux上默认大小写敏感问题和数据库编码问题

数据库编码问题

一切解决完毕后,再次打包debug版本Android包一切正常(暗喜...),最后打包release发布包:

1、需要生成签名,使用JDK自带工具,需要先按照JDK

keytool -genkey -v -keystore  your_name.jks  -keyalg RSA -keysize 2048 -validity 10000 -alias your_alias_name

-keystore  证书名  后缀为.jks
-keyalg  算法
-keysize 证书大小
-validity证书有效期(单位:天)1000即1000天
1、密钥库口令
2、您的名字与姓氏:
3、后面的步骤可以不填。。。
4、确认信息:Y
5、确认密码
6、生成证书

2、生成的证书放入/platform/android/目录下,同时在同级目录创建release-signing.properties文件,文件写入

storeFile=你的文件名.jks
keyAlias=你的文件别名
storePassword=秘钥库密码
keyPassword=秘钥密码(即生成证书最后输入的密码)

3、执行打包Android发布包命令

ionic cordova build --release --prod
--release构建发布包
--prod优化应用启动速度

4、等待打包完成再次安装到手机,打开应用测试功能,(噗~一口老血)又访问不了网络?....

了解原因,因为服务端HTTPS服务使用自签名,客户端不信任,无法发出请求,第三方证书发放只给域名颁发证书,不给IP,项目是私服,没有域名,只好在客户端跳过认证,在/platform/android/CordovaLib/src/engine/SystemWebViewClient.java下修改代码


//首先在Java文件找到onReceivedSslError方法,注意参数,有几个同名重载方法
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        /*这里会判断程序包为debug版本还是release版本
        //debug版本会跳过认证证书,release版本会要求先认证通过才可以访问服务器IP,这里把代码注释掉
        final String packageName = parentEngine.cordova.getActivity().getPackageName();
        final PackageManager pm = parentEngine.cordova.getActivity().getPackageManager();

        ApplicationInfo appInfo;
        try {
            appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
            if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
                // debug = true  这里就是debug跳过认证,将这个方法写到最下面
                handler.proceed();
                return;
            } else {
                // debug = false
                super.onReceivedSslError(view, handler, error);
            }
        } catch (NameNotFoundException e) {
            // When it doubt, lock it out!
            super.onReceivedSslError(view, handler, error);
        }
        */
        handler.proceed();//直接在这里跳过认证
    }

以上为Android程序跳过证书认证,IOS应用包需要在苹果系统测试,买不起MAC未测试

一切准备完毕,再次打包,完美运行...

5、上传到Android各大应用商城

你可能感兴趣的:(前端)