為了調用系統(tǒng)隱藏方法和參數荒典,可使用自定義framework.jar方式來進行調用
一 修改要調用的信息
在Android源代碼中將需要調用的方法或者變量上的hide信息刪掉贵涵,如下:
/************************刪之前***************************/
/** @hide */
public static final int MIRACAST_DISABLED = 0;
/** @hide */
public static final int MIRACAST_SOURCE = 1;
/** @hide */
public static final int MIRACAST_SINK = 2;
/** Internal use only @hide */
public void setMiracastMode(int mode) {
try {
mService.setMiracastMode(mode);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/************************刪之后***************************/
public static final int MIRACAST_DISABLED = 0;
public static final int MIRACAST_SOURCE = 1;
public static final int MIRACAST_SINK = 2;
public void setMiracastMode(int mode) {
try {
mService.setMiracastMode(mode);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
二 拷貝Jar文件
將Android源碼編譯后中的 android\out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar文件拷貝到Android Studio項目中的libs文件海铆,我這里將其重命名為framework
三 配置Jar文件
第一步
在app的build.gradle的依賴中修改盐杂,如下:
一定要注釋掉之前對libs下所有Jar依賴
// 添加對該jar的依賴驳棱,并注釋掉對libs所有jar依賴的配置
compileOnly files('libs/framework.jar')
// implementation fileTree(dir: 'libs', include: ['*.jar'])
第二步
在項目的build.gradle中添加對framework的依賴信息批什,如下:
allprojects {
repositories {
google()
jcenter()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
}
}
}
四 重新同步項目
將項目重新同步,即可調用到隱藏方法(雖然方法調用時可能為紅色)
五 可能出現的問題
將項目同步后社搅,修改app目錄下的app.iml文件
將自定義framework.jar的依賴順序調整到Android sdk之前
在文件內搜索framework.jar驻债,然后剪切粘貼到Android API 26 Platform上方
注意:每次同步項目后app.iml的順序都會變,所有每次都有手動調整
調整后如下:
<orderEntry type="library" name="Gradle: __local_aars__:E.\work\android_studio_project\WFDSindDroid\app\libs\framework.jar:unspecified@jar" level="project"/>
<orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />