车载系统应用开发集成系统API

背景

车载开发中,我们为了快速迭代,降低开发成本,往往都会把一些系统应用,剥离出来,做成普通的应用进行开发,这样做,环境配置更简单,编译效率更高,学习成本更低,开发和调试的速度也大大提高。但是我们在开发过程不可避免需要用到某些系统的某些API,如果所有的方法都用反射的话,会大大降低开发的效率。那么我们就需要集成一些系统编译的空方法和类。但是加载这个jar包,会有很多问题。

问题

隐藏的API和systemAPI 会爆红,编译也会失败,无法引用到jar里面的内容

通用解决方法

需要在指定模块gradle中 增加如下代码,把这个jar导入到编译链中。

groovy 复制代码
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile).tap {
            configureEach {


                List<File> newFileList = new ArrayList<>();
                //相对位置,根据存放的位置修改路径
                newFileList.add(new File("./libs/framework.jar"))


                if (options.bootstrapClasspath != null && options.bootstrapClasspath.getFiles() != null) {
                    Set<File> fileSet = options.bootstrapClasspath.getFiles()
                    newFileList.addAll(fileSet)
                }

                options.bootstrapClasspath = files(newFileList.toArray())
            }
        }
    }
}

其他问题

但是在使用更高级别的工程上的时候,我们使用了更高级别的jdk的时候,这样使用就不生效,怎么都编译不过。

解决办法

这种集成framework.jar的方式,只针对 jdk8 有效,所以必须强制指定这个module 为jdk 8。并且和其他的代码隔离。才能使用,并且吧lint编译关闭,不关注报错,才行。

groovy 复制代码
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    lintOptions {
        abortOnError false
        absolutePaths false
    }

总结

  • 需要先把jar加载到工程中
  • 然后再设置 模块的jdk
相关推荐
逐光老顽童1 天前
Java 与 Kotlin 混合开发避坑指南:30 个真实案例实录
android·kotlin
爱勇宝2 天前
鸿蒙生态的下半场:开发者不只要能开发,还要能赚钱
android·前端·程序员
Yeyu2 天前
刷新一帧的艺术:invalidate / postInvalidate / postInvalidateOnAnimation全解析
android
潘潘潘2 天前
Android OTA 升级原理和流程介绍
android
plainGeekDev2 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
plainGeekDev2 天前
getter/setter → Kotlin 属性
android·java·kotlin
YXL1111YXL2 天前
Handler 消息回收与协程异步执行的时序陷阱
android
恋猫de小郭2 天前
KMP / CMP 鸿蒙版本 Beta 发布,他有什么特别之处?
android·前端·flutter
三少爷的鞋2 天前
Android 协程并发控制:别动线程池,控制好并发语义就够了
android
weiggle3 天前
第七篇:状态提升与单向数据流——架构设计的核心
android