weex+android原生开发学习笔记(五)

2024-05-11 20:32

本文主要是介绍weex+android原生开发学习笔记(五),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

weex+android原生开发学习笔记(五)

 整理android好些个好的功能点

 111

1、android中依赖的weex sdk20.0版本,scroller或list会出现无法清空页面cell;换list即可

2、weex使用list展示列表,页面实现搜索功能,(因为我这边依赖weex-sdk的版本是0.20.3.0,所以搜索前后,使用两个list展示):出现的问题就是,搜索后,展示的list  cell会出现错位的情况?

    解决:把list标签cell里 的标签内容用div包裹起来,align-items: center;可能也会有影响,反正UI嘛,仔细调整即可
    
3、android网络安全的证书配置信息,作为一个引子,有时间研究下:
        
    SSL-NetworkSecurityConfig证书配置解析
    
    Android N 包含一个网络安全配置特性,让应用可以在一个安全的声明性配置文件中自定义其网络安全设置,而无需修改应用代码。 可以针对特定域和特定应用配置这些设置。 该特性的主要功能如下所示:
    自定义信任锚:针对应用的安全连接自定义哪些证书颁发机构 (CA) 值得信赖。 例如,信任特定的自签署证书或限制应用信任的公共 CA 集。
    仅调试重写:在应用中以安全方式调试安全连接,而不会增加安装基数的风险。
    Cleartext traffic 选择退出:防止应用意外使用 cleartext traffic。
    证书固定:将应用的安全连接限制为特定的证书。
    
    添加安全配置文件
        <application android:networkSecurityConfig="@xml/network_security_config" />
        
        <network-security-config>
          <base-config   />      <!--0 或 1 个-->
          <domain-config>     <!--任意数量-->
                <domain />      <!--1 个或多个 -->
          <trust-anchors  />    <!--0 或 1 个-->
          <pin-set />   <!--0 或 1 个-->
          <domain-config />   <!--任意数量的已嵌套-->
          </domain-config>    
          <debug-overrides />    <!--0 或 1 个 -->
        </network-security-config>


    参考文章:https://www.jianshu.com/p/19b8294f4ac2、https://blog.csdn.net/wen_demo/article/details/51943201
    
4、android开发安装App对8.0的适配:

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>   安装权限

    Android8.0 允许安装未知来源权限,在Android8.0之前的系统中,用户要从除官方应用商店之外的来源安装App时,需要打开系统设置当中的”允许未知来源”安装应用程序的选项,在最新的Android O当中谷歌已经删除了该永久授权的选项,从系统设置当中已经找不到该开关。谷歌将永久授权修改为每次的单独授权,当用户每次安装第三方来源的android软件时需要对软件权限进行手动确认

    具体配置原文:https://blog.csdn.net/feibendexiaoma/article/details/80093354    

5、android开发对9.0的适配:

    解决9.0的网络问题
    
    原文简单介绍:https://www.jianshu.com/p/9c1811fc9955?tdsourcetag=s_pctim_aiomsg

6、android manifest中uses-library的使用:

    <uses-library android:name="org.apache.http.legacy" android:required="false"/>   
    
    这个元素用于指定该应用程序必须链接的共享类库。这个元素告诉系统该应用程序包的类装载器中所包含的类库代码。
    
    原文介绍:https://blog.csdn.net/chuyouyinghe/article/details/79897192
    
7、android实现文件选择器(NoNonsense-FilePicker文件选择器):

    一个风格简洁的可扩展文件选择器。 如果你想要这样一个文件选择器:
        1.容易扩展,文件来源既可以是本地sdcard,也可以是来自云端的dropboxapi。 
        2.可以在选择器中创建目录。本项目具备上述的两个要求,同时很好的适配了平板和手机两种UI效果。项目的核心是在一个abstract 类中,因此你可以很方便的继承以实现自己需要的选择器
    
    原文参考:https://www.cnblogs.com/oshub/articles/4360654.html
    源码:https://github.com/spacecowboy/NoNonsense-FilePicker

8、android+weex支持android原生功能(选择图片、拍照等)的库:

    nat库,http://natjs.com/#/zh-cn/ (官网地址)

    android端需要依赖的的对应的库:
        // NatJS
        implementation "com.instapp.nat:weex-plugin-modal:1.0.1-alpha"
        implementation "com.instapp.nat:weex-plugin-stream:1.0.0-alpha"
        implementation "com.instapp.nat:weex-plugin-transfer:1.0.0-alpha"
        implementation "com.instapp.nat:weex-plugin-media-image:1.0.1"
        implementation "com.instapp.nat:weex-plugin-camera:1.0.2"
        implementation "com.instapp.nat:weex-plugin-communication:1.0.1"
        …………
        
        //对应的要做扩展:
        WXSDKEngine.registerModule("nat/modal",Modal.class);
        WXSDKEngine.registerModule("nat/stream",Stream.class);
        WXSDKEngine.registerModule("nat/transfer",Transfer.class);
        WXSDKEngine.registerModule("nat/media/image",Image.class);
        WXSDKEngine.registerModule("nat/camera",Camera.class);
        WXSDKEngine.registerModule("nat/communication",Communication.class);
        
        //解决NatJS的Image模块依赖低版本Picasso导致preview方法不能预览https协议图片地址的问题
        final OkHttpClient client = new OkHttpClient.Builder()
                .protocols(Collections.singletonList(Protocol.HTTP_1_1))
                .build();
        final Picasso picasso = new Picasso.Builder(this)
                .downloader(new OkHttp3Downloader(client))
                .build();
        Picasso.setSingletonInstance(picasso);
        
9、 weex+js实现列表A-Z#排序展示:

    整理地址:https://blog.csdn.net/u010326875/article/details/86352670
    
10、weex+js使用,对数据的处理修改后,vue的标签页面没有对应的反应处理

    当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去;
    
    解决办法: this.$set(item,'openOrCloseState',!item.openOrCloseState)    使用this.$set  这个是前段同学都知道的吧
    
    参考解决:https://www.cnblogs.com/Smiled/p/7683097.html
    
11、android 7.0系统解决调用摄像头(崩溃)的问题

    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
        builder.detectFileUriExposure();
    }

12、weex中定时的使用和取消定时:

    let self = this;
    let interval = setInterval(function(){
        self.showDialog = false;
        clearInterval(interval);//取消定时
    },2000);
    
13、android端判断网络的方法:

    /**
     *    TODO 判断是否有网络连接
     * @param context    Context
     * @return int  0:无网络可用 1:wifi可用 2:移动网络可用
     */
    public static int getNetworkType(Context context) {
        if (context != null) {
            try {
                ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                if (connectivity != null) {
                    NetworkInfo info = connectivity.getActiveNetworkInfo();
                    if (info != null && info.isConnected()) {
                        if (info.getType() == ConnectivityManager.TYPE_WIFI) {
                            return 1;
                        }
                        if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                            return 2;
                        }
                        if (info.getState() != NetworkInfo.State.CONNECTED) {
                            return 0;
                        }
                        return 0;
                    }
                }
            } catch (Exception e) {
                return 0;
            }
        }
        return 0;
    }

14、android端从6.0以后出现的通知问题notification的各种bug和坑:

    NotificationUtil.createNotificationChannel(this,Constants.Notification.CHANNEL_ID_UPGRADE,"应用升级");
    
    具体介绍和解决的坑:https://www.jianshu.com/p/99bc32cd8ad6、https://www.jianshu.com/p/92afa56aee05
    
15、android端,实现当APP从后台切到前台时,处理一些操作比如,检查更新:

    // foreback
    implementation 'com.takwolf.android:foreback:0.1.1'

    源码github参考使用: https://github.com/TakWolf/Android-Foreback、https://blog.csdn.net/CrazyMo_/article/details/78875686
    
16、android端检查更新库:

    除了我的博客,记录的自己用源码实现的检查更新,下面这个库也不错的。
    参考:https://github.com/czy1121/update
    
17、android端,强大美观的通用弹窗XPopup

    参考:https://juejin.im/post/5c1b044a6fb9a049f23cb5c6   说实话我不太喜欢,我还是喜欢自己写弹框
    
18、Android Gradle manifestPlaceholders 的妙用

    在gradle里配置manifestPlaceholders的一些属性,manifest里可以直接引用:
    
     defaultConfig {
        ........
        manifestPlaceholders = [
               property_person:"xiaobai"
        ]
    }
    
    <meta-data android:name="property_person"
        android:value="${property_person}"/>
    
    debug {
        .........
        manifestPlaceholders = [
                property_name:"motian_bai"
        ]
    }

    <data android:scheme="${property_name}" />
    
    参考:https://blog.csdn.net/qq_21793463/article/details/52069127
    
19、okhttp3 访问服务器失败 onFailure 提示CLEARTEXT communication to host not permitted by network
    升级到Android API 28时,需要配置networkSecurityConfig 才能访问服务器:
    android:networkSecurityConfig="@xml/network_security_config"
    
    参考:https://blog.csdn.net/qq_30135181/article/details/80108525、https://blog.csdn.net/xyx2999/article/details/82984501
    
    
20、android:supportsRtl,声明你的application是否愿意支持从右到左(原来RTL就是right-to-left 的缩写...)的布局。

    如果设置为true,targetSdkVersion设置为17或更高,各种RTL的API将被激活,系统使用您的应用程序可以显示RTL布局。如果targetSdkVersion设置为16或更低的设置为false,RTL的API将被忽略或没有影响您的应用程序将具有相同的行为无论对用户现场的选择相关的布局方向(你的布局会从左至右)。
    此属性的默认值是false。

    原文:https://blog.csdn.net/aa464971/article/details/51372204 
    
21、Android ProGuard:代码混淆压缩,对useProguard false的使用介绍:

    注意:如果在debug模式下设置minifyEnabled true,而且需要使用Instant Run增量构建的时候,ProGuard只会删除不使用的代码,不会混淆代码。不过这个情况也是在debug下使用的吧,一般在debug模式下不开启混淆的,因为项目build的时间就很长了,再开个混淆那就更长了。如果你真的要这么debug的话:用useProguard false 即可。这样代码也会被混淆。
这个需求我暂时没有遇到过,只是在debug下有开启过混淆,但是没有用Instant Run

    参考:https://www.jianshu.com/p/303e69e378ba
    
22、Intent 启动方法和启动Action大全

    各种调用系统的方法和功能:
    参考:https://www.cnblogs.com/dame/p/8085907.html
    
23、android启动App的判断:

        Intent thisIntent=getIntent();

        // 从桌面启动
        boolean fromLauncher=false;
        //判断是不是点击桌面图标获取的跳转
        if(Intent.ACTION_MAIN.equals(thisIntent.getAction())
                && thisIntent.hasCategory(Intent.CATEGORY_LAUNCHER)){
            fromLauncher=true;
        }

        //判断是点击桌面图标  和  非系统root任务执行
        if(fromLauncher && !this.isTaskRoot()){
            finish();
            return;
        }

        final Intent intent = new Intent(WelcomeActivity.this,MainActivity.class);
        if(fromLauncher){
            intent.addCategory(Constants.Common.CATEGORY_FORM_LAUNCHER);
        }
    

24、遇到一个恶心的东西,android studio启动报错:Default Activity Not found.

    一、android studio嘛,这样的问题通常是编译错误导致,所以执行普通的常用操作:

        1、clean

        2、rebuild

        3、(sync project with gradle files)按钮

        4、重启studio

        5、重启电脑

        6、检查错误(就当前问题,是Default Activity Not found,所以检查manifest里面对activity的注册,排查错误?)

        上面的六种操作基本就解决问题了;
    
    二、但是我这个就恶心了,怎样都不行,操作assets下的资源替换就报这个错,当真操蛋的不行,关键是还找不到问题所在:

        android Default Activity not found
        
        终极解决办法,setting→Appearance & Behavior → System Settings → Password 右侧看到Database的路径,
                      删除.AndroidStudio3.2整个文件包即可
                      
    整理地址:https://blog.csdn.net/u010326875/article/details/86610264

这篇关于weex+android原生开发学习笔记(五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980580

相关文章

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3