android apk如何引用系统framework.jar,settingslib.jar

一、引用framework.jar

1.首先需要通过源码编译获得framework.jar包,实际源码编译后在out下生成classes.jar 即apk中需要导入的framework.jar

out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar

2.将jar包放入工程libs下面,然后配置build.gradle

ProjectName\app\build.gradle中的dependencies下面添加compileOnly files('libs/framework.jar')

dependencies {

    ...

    compileOnly files('libs/framework.jar')

 }

//add start 

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) {
            // nop, iml not found
            println "no iml found"
        }
    }
}

//add end

说明:实际起的作用就是和有的文章里面描述的修改ProjectName\app\app.iml中的内容起的作用一样,使as引用能使用framework.jar隐藏的api接口,将自己的jar引用放在Android API 28 Platform" jdkType="Android SDK的前面

ProjectName\build.gradle中的allprojects下面如下配置

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

3.之后直接在代码里面验证即可,如果没生效,可以rebuild工程试下,

没引用成功前,mActivityManager是调用不了系统隐藏的api接口的

如果引用成后提示

android apk如何引用系统framework.jar,settingslib.jar_第1张图片

 

 

二、引用settinglib.jar

1.首先需要通过源码编译获得settingslib.jar包,实际源码编译后在out下生成classes.jar 即apk中需要导入的settingslib.jar

out\target\common\obj\JAVA_LIBRARIES\SettingsLib_intermediates

2.将jar包放入工程libs下面,然后配置build.gradle

ProjectName\app\build.gradle中的dependencies下面添加compileOnly files('libs/framework.jar')

dependencies {

    ...

   implementation files('libs/settingslib.jar')

 }

3.实际代码调用

说明:之前思维定式以为调用系统的jar包都要类似与framework.jar中的方法一样,有的网上也说要将

implementation fileTree(dir: 'libs', include: ['*.jar'])注释掉,实际结果是不需要注释也可以用,且不要用
compileOnly files去引用,否则as调用会没问题,但是一运行就会提示类找不到的错误

补充:实际调试验证log结果,蓝牙接口调用时注意加权限

android apk如何引用系统framework.jar,settingslib.jar_第2张图片

你可能感兴趣的:(android,系统开发)