Android Studio导入framework.jar的方式

Posted by Chris on July 7, 2019

#前言 Android Studio导入普通第三方的jar是比较简单的,网上例子也比较多,但是关于导入framework.jar包内容就比较少.因为工作中需要调用到framework中的隐藏方法.我们可以导入framework.jar,编译的时候依赖framework, 打包的时候不打进去.这里记录下Android Studio中导入framework.jar包的方式,其他系统jar包的导入方式同理。 #步骤 1.首先将framework.jar拷贝到项目的/libs文件夹中,然后右键framework.jar文件,然后Add as Library ,再选当前的module 添加后在Module的build.gradle中会添加(笔者用的Android Studio是3.2) 改了framework.jar的作用域后,Module的build.gradle也会有改变,之前的implementation files(‘libs/framework.jar’),会变成compileOnly files(‘libs/framework.jar’) 2.改了framework.jar 的scope后,再在修改project的build.gradle文件,改成如下所示

allprojects {
    repositories {
        google()
        jcenter()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile){
            options.compilerArgs.add('-Xbootclasspath/p:carnetapp_music\\libs\\mms_framework.jar')
        }
    }
}

这是在原有的基础上加了gradle.projectsEvaluted{}里面的内容,这里要说明下”Xbootclasspath/p”后接的路径,是相对于当前Project的根目录,例子中的”:app\libs\framework.jar”其中的app为Module名,libs就是放framework.jar的文件夹了。 3.在Module的build.gradle中添加下面脚本

preBuild {
      doLast {
        def imlFile = file( project.name + ".iml")
        println 'Change ' + project.name + '.iml order'
        try {
            def parsedXml = (new XmlParser()).parse(imlFile)
            def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
            parsedXml.component[1].remove(jdkNode)
            def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
            println 'what' + sdkString
            new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
            groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
        } catch (FileNotFoundException e) {
            println "no iml found"
        }
    }
}

4.编译运行。这里在Android studio中修改过的api还是不会显示红色,可以编译运行。(第三步可以省略掉,是会报红,但不影响运行)