在framework中定制接口;
1.添加接口
└── xxx
└── xxx
└── xxx
├── xxx.java
├── xxx.java
├── xxx.java
├── xxx.java
├── xxx.java
└── xxx.java
2.在package_allowed_list.txt中加入打包规则
build/soong/scripts/check_boot_jars/package_allowed_list.txt
+
+###################################################
+# framework.jar coustom java
+komect\.aisoho\.cloudcomputer
+komect\.aisoho\.cloudcomputer\..*
\ No newline at end of file
3.系统解决hidden api调用
Accessing hidden method Lxxx/xxx/xxx/xxx;->getBatteryStatus()I (blocked, linking, denied)
具体代码可以看这里: base/core/java/android/content/pm/ApplicationInfo.java
private boolean isAllowedToUseHiddenApis() {
if (isSignedWithPlatformKey()) {
return true;
} else if (isSystemApp() || isUpdatedSystemApp()) {
return usesNonSdkApi() || isPackageWhitelistedForHiddenApis();
} else {
return false;
}
}
这个系统应用白名单所在位置frameworks/base/data/etc/hiddenapi-package-whitelist.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<hidden-api-whitelisted-app package="android.ext.services" />
<hidden-api-whitelisted-app package="com.android.apps.tag" />
..........
<!-- TODO: Remove NetworkStack whitelisting -->
<hidden-api-whitelisted-app package="com.android.networkstack" />
<hidden-api-whitelisted-app package="cm.komect.aqb.android.ccsdk" />
<hidden-api-whitelisted-app package="cm.komect.aqb.android.launcher" />
<hidden-api-whitelisted-app package="cm.komect.aqb.android.hjqbind" />
<hidden-api-whitelisted-app package="cm.komect.aqb.android.cloudcomputerpad" />
</config>
4.处理获取mac地址的问题
Index: packages/modules/Wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
===================================================================
@@ -1168,8 +1168,11 @@
*/
@Override
public synchronized boolean setWifiEnabled(String packageName, boolean enable) {
- if (enforceChangePermission(packageName) != MODE_ALLOWED) {
- return false;
+ if (packageName !=null && packageName.contains("cm.komect.aqb")) {
+ }else{
+ if (enforceChangePermission(packageName) != MODE_ALLOWED) {
+ return false;
+ }
}
int callingUid = Binder.getCallingUid();
int callingPid = Binder.getCallingPid();
@@ -5532,9 +5535,14 @@
@Override
public String[] getFactoryMacAddresses() {
final int uid = Binder.getCallingUid();
- if (!mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) {
- throw new SecurityException("App not allowed to get Wi-Fi factory MAC address "
- + "(uid = " + uid + ")");
+ String packageName = getPackageNameByUid(uid);
+ if (packageName !=null && packageName.contains("cm.komect.aqb")) {
+ //杭研的包不做权限判断
+ }else{
+ if (!mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) {
+ throw new SecurityException("App not allowed to get Wi-Fi factory MAC address "
+ + "(uid = " + uid + ")");
+ }
}
String result = mWifiThreadRunner.call(
() -> mActiveModeWarden.getPrimaryClientModeManager().getFactoryMacAddress(),
@@ -5548,6 +5556,14 @@
return new String[]{result};
}
+ private String getPackageNameByUid(int uid) {
+ String[] packageNames = mContext.getPackageManager().getPackagesForUid(uid);
+ if (packageNames != null && packageNames.length > 0) {
+ return packageNames[0]; // 返回找到的第一个包名
+ }
+ return null; // 如果没有找到包名,则返回null
+ }
+
/**
* Sets the current device mobility state.
* @param state the new device mobility state
最后
如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。
如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)
PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题