车载系统应用开发集成系统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
相关推荐
为码消得人憔悴15 小时前
Android perfetto - 记录分析memory
android·性能优化
尤老师FPGA15 小时前
使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第四十二讲)
android·java·ui
成都大菠萝16 小时前
2-2-29 快速掌握Kotlin-过滤函数filter
android
成都大菠萝16 小时前
2-2-18 快速掌握Kotlin-扩展属性
android
成都大菠萝16 小时前
2-2-21 快速掌握Kotlin-定义扩展文件
android
成都大菠萝16 小时前
2-2-19 快速掌握Kotlin-可空类型扩展函数
android
成都大菠萝16 小时前
2-2-23 快速掌握Kotlin-apply函数详解
android
2501_9160074716 小时前
iOS 证书如何创建,从能生成到能长期使用
android·macos·ios·小程序·uni-app·cocoa·iphone
Just_Paranoid17 小时前
【AOSP】Android Dump 信息快速定位方法
android·adb·framework·service·aosp·dumpsys
帅得不敢出门17 小时前
MTK Android11获取真实wifi mac地址
android·mtk