自定义多选相册,组件化开发

2022-01-20  本文已影响0人  光sail
背景

在我们平常的开发中 ,有很多功能都是写过的。每一个新的项目 ,又从零开始写所有的代码,显得重复劳动,既费时间,又费精力。从老项目中拷贝出来,如果文件很多的话,拷贝过来又要调试,改包名,导入新包名的类,又很繁琐。基于以上原因,我们在开发中需要做到 一处开发,处处使用,即组件化开发。

理想的开发模式应该是整个app通过各个组件合并,再加上app的业务逻辑,组成一个完整的应用。
例子

自定义相册多选图片在很多项目中都是非常常见的控件。
下面从自定义相册多选图片中的拍照获取图片功能为例子,介绍下我是如何进行组件化开发的,当然这只是组件化开发其中的一种方式。

我以单独一个module 开发自定义多选相册功能,开发完成后关联在项目App上进行调用,这样的写有以下好处

  1. 以module的方式写,当有其他项目需要使用时,打包成带res下的资源文件和清单文件的aar包供项目使用,省去了多个项目使用时,需要拷贝一大堆java文件、 图片等文件和拷贝后调试功能的麻烦。
  2. 有些同学会说可以发布的github 做成自己的libary ,再在gradle 是使用,这也是一种方法。但是github 在国内的时候有时候不太稳定,而做成aar 使用,就不会存在网络不稳定这个问题了。
组件化开发的注意事项

随着项目的复杂,组件化开发需要注意很多事项,下面就自定义多选相册的拍照功能举个例子

在组件化开发过程中,需要注意的 module 里面的清单文件,声明的四大组件名称,不能使用系统的名称,需要保证四大组件的名称在整个项目的唯一性。我们知道在调用相机进行拍照时android 7.0以上 是不能直接通过URI访问的,需要通过FileProvider 访问,一般非组件化开发,清单文件声明的FileProvide 都是下方代码块

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.fileProvider"
           android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

由于我们无法保证其他项目里是否使用android.support.v4.content.FileProvider这个系统的provider,所以在组件化开发中,我们就需要保证在我们自己的module中声明的provider的是惟一性。所以我在自定义多选相册这个module 中新建自定义的CameraFilePrivoder,继承系统的FileProvider,然后在清档文件下声明如下,这样就可以保证自定义多选相册module 的provider不会可能和其他项目产生冲突。

        <provider
            android:name="com.app.camera.CameraFileProvider"
       android:authorities="${applicationId}.app.file.provider"
              android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
上一篇下一篇

猜你喜欢

热点阅读