一、配置系统签名,正常在build.gradle中配置即可(略)

二、将系统应用import进android studio变成gradle工程。

三 、分析系统应用mk文件,查看依赖。

四、在build.gradle中添加mk中的依赖,可以远程依赖,也可以去android系统编译目录查找,android系统编译目录为:out/soong/.intermediates.

五、将framework.jar拷贝进工程libs目录,framework.jar在android编译目录 out/soong/.intermediates/frameworks/base/framework/android_common/combined,这个jar可以不限制使用android的系统api.

六,配置framework.jar的gradle依赖,compileOnly只编译即可。

七、在最外层build.gradle根目录中配置脚本,这一步是为了编译的时候以framework中的api优先编译.

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        google()
    }

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            Set<File> fileSet = options.bootstrapClasspath.getFiles()
            List<File> newFileList =  new ArrayList<>();
            //"../framework.jar" 为相对位置,需要参照着修改,或者用绝对位置
            newFileList.add(new File("./app/libs/framework.jar"))
            newFileList.addAll(fileSet)
            options.bootstrapClasspath = files(
                    newFileList.toArray()
            )
        }
    }
}

八、在最外层配置脚本,这一步告诉android studio 将android.jar配置到依赖末尾,使得android studio去优先使用framework.jar中的api,这个和上一步的用途是不一样的,上一步是为了编译,而这一步是为了android studio这个开发工具来配置的。

gradle.buildFinished {
    pushDownAndroidSDK('./.idea/modules/app/xxxxx.app.iml')
}

def pushDownAndroidSDK(iml){
    def imlFile = file(iml)
    try {
        def parsedXml = (new XmlParser()).parse(imlFile)
        def jdkIndexOf = parsedXml.component[1].orderEntry.findIndexOf { it.'@type' == 'jdk' }
        if (jdkIndexOf <= 1) {
            def jdkNode =parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
            parsedXml.component[1].remove(jdkNode)
            new Node(parsedXml.component[1], 'orderEntry',['type': 'jdk', 'jdkName': 'Android API 28 Platform', 'jdkType': 'Android SDK'])
            def writer = new StringWriter()
            new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
            imlFile.text = writer.toString()
            println "Push File: $iml jdk priority ok"
            groovy.xml.XmlUtil.serialize(parsedXml,new FileOutputStream(imlFile))
        }
    } catch (Exception e) {
        // do nothing
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注