Android调用@hide系统隐藏类的几种方法

转自https://blog.csdn.net/pshiping2014/article/details/79549680

调用android系统隐藏的API的几种方法(以调SystemProperties这个类为例):

1、用反射:

//获取系统属性public static  String getProperty(String key, String defaultValue) {    String value = defaultValue;    try {        Class<?> c = Class.forName("android.os.SystemProperties");        Method get = c.getMethod("get", String.class, String.class);        value = (String)(get.invoke(c, key, "unknown" ));    } catch (Exception e) {        e.printStackTrace();    }finally {        return value;    }}//设置系统属性public static void setProperty(String key, String value) {    try {        Class<?> c = Class.forName("android.os.SystemProperties");        Method set = c.getMethod("set", String.class, String.class);        set.invoke(c, key, value );    } catch (Exception e) {        e.printStackTrace();    }}

注意:编译时要注释掉 //implementation fileTree(include: ['.jar'],dir: 'libs')*

2、添加系统framework.jar

在目录下``**out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar**改名得到 framework.jar 把jar包添加到lib目录并add as library,修改项目的build.gradle文件,在repositories里加入如下代码

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

在app的build.gradle中添加依赖

dependencies {    provided files('libs/framework.jar')//    implementation fileTree(include: ['*.jar'], dir: 'libs')    implementation 'com.android.support:appcompat-v7:25.4.0'    implementation 'com.android.support.constraint:constraint-layout:1.0.2'    testImplementation 'junit:junit:4.12'} // 作用域改为provided

3、添加layoutlib.jar依赖

修改app中gradle.build文件添加默认的layoutlib.jar(或是指定sdk添加)即可调用隐藏的api,配置如下

修改app中的build.gradle,注意在android{}之后添加如下代码

def getLayoutLibPath() {    return "${android.getSdkDirectory().getAbsolutePath()}" + "/platforms/" +            android.compileSdkVersion +"/data/layoutlib.jar"}//String SDK_DIR = System.getenv("ANDROID_SDK_HOME")//if (SDK_DIR == null){//    java.util.Properties prop = new Properties()//    prop.load(new FileInputStream(project.rootProject.file("local.properties")))//    SDK_DIR = prop.get("sdk.dir")//}dependencies {    provided files(getLayoutLibPath())    implementation 'com.android.support.constraint:constraint-layout:1.0.2'//    provided files("${SDK_DIR}/platforms/android-21/data/layoutlib.jar")

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,284评论 25 708
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    wgl0419阅读 6,354评论 1 9
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,724评论 0 3
  • 文/莲素 怪奇事件簿目录 上一章 【玄幻】怪奇事件簿︳器灵之泣 1 笃子对着带了新朋友来店里的小狐狸,笑的别有深意...
    莲素阅读 298评论 4 13
  • 从初中开始住校,一群人住在一间宿舍里,前前后后住了大概有八九年。够了,所以毕业一出来就开始租房子一个人住,物质上可...
    方舟舟阅读 446评论 0 0