Apicloud 之 Android studio 原生封装

19年年底离职,回家过年之前,尝试性投递了几家公司,面试机会蛮多的,就选了两家近的去看看,第一家面试就通过了,安心的回家,迎接新年新气象------疫情…反正以Android开发成功入职后,到公司后发现原生只是偶尔维护迭代,更多的精力放在hybird开发-------Apicloud开发。
顺便打个广告,这是我学习一周,就开始参加迭代和维护的跨平台工程。
蕉梨健身APP(其他应用市场也都有)
虽然之前用Vue开发过,也了解过apicloud框架,但是说实话用Apicloud开发还是有点怂的,毕竟不曾了解的东西,总的需要亲身去填坑。
关于Apicloud开发暂时不做整理,目前也在系统的去总结一个从0到1的工程,等完结会配合自己写的练手工程去总结下(同样工程也会开源出来)。
今天总结下自己这几天用Android studio 封装原生功能所遇到的费时操作,关于apicloud(自定义模块)。
不曾了解的先看下官方文档:模块开发指南_Android_Studio

摘要:先简单论述下,证明官方sdk是能运行的,是骡子是马,跑起来看看再说

开发工具:Android studio 最新版
开发准备:先到官方去下载最新的SDK,传送地址

在这里插入图片描述
下载下来后,解压,找到Android工程,用Android studio打开
在这里插入图片描述
demo工程版本较低,打开的时候,需要自己简单调整下(比如把compile换成api,minSDK写在哪里等—根据提示完成就好了)
在这里插入图片描述
主工程也就是你下载的module_SDK中的uzmap中的类似于路由或者配置文件;widget中的则是HTML资源----相当于Apicloud studio2中的工程。打开index_frm你会看到
在这里插入图片描述
真机运行就可以验证封装的demo。
运行成功后,先认真的去看官方给工程里的module,大概四五个的样子,每个module都代表了不同的需求。比如ApplicationDelegate类似于原生中的Application,一些三方初始化的地方都可以在这里初始化,前提是先在module.js配置路径,该工程运行的时候,会先运行该类 ;另外,虽然官方给的是不同的module,其实是可以放到同一module中,比如ApplicationDelegate放在你新建的module中,你再自己重新建js映射文件,不过需要注意的是,你的js映射文件ApplicationDelegate都要在module.js中配置。

新建module

如果是比较新的studio,新建module时你会看到Project needs to be converted to androidx.* dependeces
在这里插入图片描述
解决方案:
在这里插入图片描述
对比上图,在工程里找到改文件,复制下面到你的文件中

android.useAndroidX=true
android.enableJetifier=true

sync now ;然后新建module,建立成功后把上面的true都改为false,再sync now。
根据官方给的module样式,把自己新建的module依赖到APP主工程中去。

开发tips

流程,官方文档其实已经很仔细了,我现在简单描述下需要被知道的事:

  • ApplicationDelegate类可以进行三方初始化,或者自己工程需要Application初始化的地方,都可以放到该类里面去,不过要记得在module,js中配置
  • 在这里插入图片描述
  • 原生中的context可以用context()代替;
  • 你的module中所依赖的三方都可以放到你新建的module中去,如果只是简单的原生方法进行js封装,打包还是很easy的;如果有其他依赖,比如三方arr,就麻烦了点(这个下面讲,毕竟我自己为了上传到apicloud控制台,折腾了一天)
  • js封装
public void   jsmethod_isPermissionOpen(final UZModuleContext moduleContext) {
        boolean b = false;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                 b = NotificationManagerCompat.from(context()).getImportance() != NotificationManager.IMPORTANCE_NONE;
            }else
                 b = NotificationManagerCompat.from(context()).areNotificationsEnabled();

             JSONObject ret = new JSONObject();
             try {
                 ret.put("state", b);
             } catch (JSONException e) {
                 e.printStackTrace();
             }
             moduleContext.success(ret, true);   //这个就是官方给的回调方法,就是原生的callback

        }

jsmethod_ 这个是官方定义的前缀,isPermissionOpen这个则是自己定义的方法名,比如你的模块名字叫module

var isP = api.requre("module);
isP .isPermissionOpen({},funcation(ret,err){

});

简单来说,就是你写的方法,方法名前加上jsmethod_,然后在结果处做个 moduleContext.success(ret, true);成功或失败回调。其他逻辑,原生如此就如此。

  • 监听回调
    其实跟普通方法js封装一样,在你的原生监听方法里写上 moduleContext.success(ret, true);成功或失败回调。
  • 依赖包冲突
    该sdk提供的还是V4包,但是我们新的module需要的是最新的,那就果断把sdk依赖的v4包删除,在module中添加所需要的依赖。
  • Android studio 鼠标点击下你自己的module 然后 build ==》 build Module ' ** '打出来的包是debug,官方说的是release包啊
    解决方案1:在你的Terminal中输入gradlew assembleReleaseEnter按一下,静等release包;
    解决方案2:其实debug包也无所谓,都可以的,所以不用处理。
    (先写这么多,其他注意的后期补)

打包

如果只是简单的原生方法封装,比如调什么权限,直接js封装就好,打包的时候,在module.js中配置好—

  • name为你的module名字
  • class为你封装的js方法,也就是你那个继承UZModule的类的路径

在这里插入图片描述

  • 新建文件夹(以你的module名为文件夹名字),在你的文件夹里新建文件module.js,里面写上如此样式的 json
    在这里插入图片描述
    把你的module的arr文件也放到该文件夹中
    在这里插入图片描述
    然后打成zip包就可以重新上传了。

如果你的module中有第三方依赖,官方文档给的不太细致,假如你按照文档成功上传到平台,那么别往下看了

本次封装,我加入了一些jar包、依赖还有三方ARR,自我调用自己的module arr文件是成功的,但是就是上传不上去,折腾了一下午,最终总结出:

  • 如果有三方arr,在你打arr文件的时候,该三方arr是不会被打入你的arr包中;
  • 如果有三方jar,在你打arr文件的时候,该三方jar是会被打入你的arr包中;

上述两个可以自己查看,把你的arr包后缀改成.zip就可以解压查看。
在这里插入图片描述

  • 即使按照官方说的,把第三方arr也放进文件中一起打包,发现也是无济于事,根据上面的两条,我建议把arr包换成jar包进行依赖
    arr转jar方法:比如上图的clsaa.jar就是你需要的jar,把名字换掉可以了。
    需要注意的是,你查看下libs文件夹下有没有该jar所依赖的包,有的话一起放入到你的工程里去
    在这里插入图片描述
    还要查查有没有需要的so库,有的话在你打包的时候放到你的文件夹中的target文件夹里
    在这里插入图片描述
    新建zip包,上传自定义模块里
    到此,算是成功了,再此做个笔记,供需要的参考,到目前封装了几个了,最大的就是腾讯的IM,有需要探讨的,欢迎来撩。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章