美文网首页Android tools
Android中使用 framework.jar 的方法

Android中使用 framework.jar 的方法

作者: 跟跟_a5e9 | 来源:发表于2018-04-09 23:46 被阅读0次

    开发过程中遇到,要调用系统@hide的方法,这个要使用framework.jar

    第一步:保证framework.jar 的版本匹配

    第二步:把jar包放到libs文件下,并add to library,这个时候在build.gradle文件里看到

    dependencies {
        .....
        implementation files('libs/framework.jar')
    }
    

    要把它改成

    dependencies {
        .....
        provided files('libs/framework.jar')
    }
    

    这样个provided 的作用是我们只需要编译成功,不需要把这个包打到apk中。

    第三步:修改项目根目录下的build.gradle

    allprojects {
        repositories {
            jcenter()
            google()
        }
        gradle.projectsEvaluated {
            tasks.withType(JavaCompile) {
                options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar'
            }
        }
    }
    

    放到allprojects中是要作用到所有的子模块上,tasks.withType(JavaCompile) 是在 javac 的 task 中加入一个参数,就是在 Xbootclasspath 增加自己的 jar 包

    第四步:更改jar包编译顺序优先于android.jar

    dependencies {
        ....
        provided files('libs/framework.jar')
    }
    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"
                new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
                groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
            } catch (FileNotFoundException e) {
                // nop, iml not found
            }
        }
    }
    

    这个时候有可能还会遇到这个错误

    
    Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
    > java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
    
    

    解决办法

    在项目上右键,选择"Open Module Setting" ,点击“Dependences”,看到
    {include=[*.jar], dir=libs},remove掉,应该就OK了

    相关文章

      网友评论

        本文标题:Android中使用 framework.jar 的方法

        本文链接:https://www.haomeiwen.com/subject/gzbwhftx.html