AndroidStudio4.x引用framework.jar

三个步骤

这里的使用的Android Studio 4.1.2。

1.在allprojects中加入gradle.projectsEvaluated

/libs/framework.jar为路径

allprojects {
    repositories {
        mavenCentral()
        google()
        jcenter()
    }

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:/libs/framework.jar')
        }
    }
}

2.在dependencies 中依赖framework.jar

    dependencies {
        //implementation fileTree(include: '*.jar', dir: 'libs')
        compileOnly files('/libs/framework.jar')
    }

3.在dependencies下面加入preBuild,也是最重要的一步,

是为了把Android SDK的引用放到最后,这样当framework.jarandroid.jar都有这个类时,优先引用framework.jar里面的类。

    dependencies {
        //implementation fileTree(include: '*.jar', dir: 'libs')
        compileOnly files('/libs/framework.jar')
    }

    preBuild {
        doLast {
            def imlFile = file(project.name + ".iml")
            println('yxp change ' + project.name + '.iml order')
            try {
                def parsedXml = (new XmlParser()).parse(imlFile)
                //这里有可能是'1'也有可能是'2',也有可能是其他,需要自己去判断
                def parseXmlComponent = parsedXml.component[2];
                def jdkNode = parseXmlComponent.orderEntry.find { it.'@type' == 'jdk' }
                parseXmlComponent.remove(jdkNode)
                def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
                new groovy.util.Node(parseXmlComponent, 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
                groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
            } catch (FileNotFoundException e) {
                // nop, iml not found
            }
        }
    }

这里def parseXmlComponent = parsedXml.component[2];2是说在第几个Component,我这里是第三个,所以选2,具体需要自己去判断,在工程的iml文件里面。

我的framework.jar在第三个里面,所以填写下标2
改变后的orderEntry,可以看到framework.jarsdk 29前面。

  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
     //省略...
    <orderEntry type="sourceFolder" forTests="false"/>
    <orderEntry type="library" name="Gradle: org.apache.http.legacy" level="project"/>
    <orderEntry type="library" name="Gradle: ./libs/framework.jar" level="project"/>
    <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK"/>
  </component>

最后可能还需要加入multiDexEnabled true

android{
        defaultConfig {
            applicationId "com.noahedu.xxxxxx"
            minSdkVersion 23
            targetSdkVersion 23
            versionCode 300093
            versionName "3.00.093AS"
            multiDexEnabled true
        }
}
    dependencies {
        //implementation fileTree(include: '*.jar', dir: 'libs')
        implementation 'com.android.support:multidex:1.0.3'
        compileOnly files('/libs/framework.jar')
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容