Android Studio 4.2及以上创建的项目工程 引入本地framework.jar踩坑记录

Posted sayhello_class

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio 4.2及以上创建的项目工程 引入本地framework.jar踩坑记录相关的知识,希望对你有一定的参考价值。

直接上干货

1.项目根目录下的build.gradle文件,最外层目录结构,添加以下代码

allprojects 
    gradle.projectsEvaluated 
        tasks.withType(JavaCompile) 
            Set<File> fileSet = options.bootstrapClasspath.getFiles()
            List<File> newFileList =  new ArrayList<>();
            //相对位置,根据存放的位置修改路径,如下frameworkmodul为项目的一个module
            newFileList.add(new File("frameworkmodul/libs/framework.jar"))
            newFileList.addAll(fileSet)
            options.bootstrapClasspath = files(
                    newFileList.toArray()
            )
        
    

2.framework.jar存放的module下的build.gradle文件,最外层目录结构,添加以下代码,把.iml里的

<orderEntry type="jdk" jdkName="android API XX Platform" jdkType="Android SDK"/>

放到该文件最后(该行原来的是在iml文件中,第二个component结构中的第一个orderEntry)

.iml文件已存放在了项目根目录下的.idea/modules目录下了,填写格式如下,其中“../”为相对路径,frameworkmodule为framework.jar存放的module;

preBuild 
    doLast 
        def imlFile = file("../.idea/modules/frameworkmodul/" + project.parent.name + "." + project.name + ".iml")
        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 Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
            groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
         catch (FileNotFoundException e) 
        
    

3.framework.jar存放的module下的build.gradle文件,dependencies结构中,增加

dependencies 
    compileOnly files('/libs/framework.jar')

4.framework.jar所在的module中,如果要使用framework中的隐藏的方法或实现隐藏的接口,该类建议使用Java Class(Kotlin Class项目代码会报红,代码无法追踪到本地的framework.jar中),这样可以直接引用到相应的方法,而且项目不报红(若刚开始引用不到,先运行下项目试下),如下:

import android.media.AudioRecord;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class FrameworkTestActivity extends AppCompatActivity implements AudioRecord.ICAEListener 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_framework);
    

    @Override
    public void onWakeup(float v, int i, int i1, String s) 

    

    @Override
    public void onASRAudioCallback(byte[] bytes, int i) 

    

    @Override
    public void onDWakeupAudioCallback(byte[] bytes, int i) 

    

如有错误欢迎指正,如有疑问请留言~

以上是关于Android Studio 4.2及以上创建的项目工程 引入本地framework.jar踩坑记录的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 4.0 及以上版本技巧及问题总结

visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案

Android studio 升级4.2后ButterKnife无效

如何在Android studio导入jdk9及以上版本中依赖包,如'rt.jar',' dt.jar'等

mac android studio 找不到DDMS及monitor打开白屏或报错问题

android studio 4.2 无法安装android sdk