android 公开类调用hide方法,Android调用@hide系统隐藏类的几种方法

调用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")

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值