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'等