Android Studio调用系统隐藏接口EthernetManager
google source签名文件参考:https://android.googlesource.com/platform/build/+/donut-release/target/product/security/
pem转jks来实现系统签名文件:https://blog.csdn.net/cxq234843654/article/details/51557025
项目需要实现以太网的管理功能,查阅源码后得知EthernetManager属于系统接口,具有@hide属性,所以在Android SDK中找不到这些接口,编译会失败。
EthernetManager接口具有系统权限,需将APP变成系统应用才可正常使用。
解决编译问题
一、我们先获取并编译Andorid源码,找到以下文件,解压后可以看到,classes.jar中包含所有API
$ANDROID_SOURCE/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
二、下载BeyondCompare工具,将此classes.jar和工程中使用的android.jar比对,将用到的部分合并到android.jar中
解决运行问题
一、进入以下目录获取系统签名文件platform.pk8和platform.x509.pem
# ls $ADNDROID_SOURCE/build/target/product/security platform.pk8
platform.x509.pem
二、进入以下目录找到签名工具signapk.jar
$ANDROID_SOURCE\out\host\linux-x86\framework\signapk.jar
三、通过工具给apk进行系统签名,demo.apk是你的apk,demo_signed.apk就是系统签名后的apk
java -jar signapk.jar platform.x509.pem platform.pk8 demo.apk demo_signed.apk
四、查看.x509.pem文件内容
openssl x509 -in platform.x509.pem -noout -text
通过pem系统签名文件生成jks格式签名文件
开发过程中先生成APK,再用signapk.jar签名太繁琐,不利于研发调试,我们想办法通过platform.pk8和platform.x509.pem生成.jks文件,然后从build.gradle引入
一、首先把private key (pkcs8) 从DER format转成PEM format
# openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
二、然后把private key跟public key转成pkcs12
# openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.pkcs12
三、最后用keytool把 (pkcs12) 转成jks (platform.jks)
keytool -importkeystore -srckeystore platform.pkcs12 -srcstoretype pkcs12 -srcstorepass "password" -destkeystore platform.jks -deststoretype jks -deststorepass "password"
四、查看jks信息,默认alias是1,jks文件的别名密码修改可参见help
keytool -v -list -keystore platform.jks
在Android Studio中实时系统签名
一、menifest文件添加系统应用属性
android:sharedUserId="android.uid.system"
二、添加以太网以及系统接口权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
三、build.grade自定义jsk签名文件
signingConfigs {
release {
storeFile file("$YOUR_PATH/platform.jks")
storePassword '000000'
keyAlias 'aliasname'
keyPassword '000000'
}
debug {
storeFile file("$YOUR_PATH/platform.jks")
storePassword '000000'
keyAlias 'aliasname'
keyPassword '000000'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
四、调个接口试试
mEthernetManager = (EthernetManager) context.getSystemService("ethernet");
Android Studio调用系统隐藏接口EthernetManager的更多相关文章
- Android Studio搭建系统App开发环境
一.前言 在Android的体系中开发普通app使用Android Studio这一利器会非常的方便.但是开发系统app可能就会有些吃力,不过经过一些配置仍然会 很简单.我们知道系统app因为涉及到一 ...
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
- Android Studio 导入系统 jar包
1.当前需要导入系统jar包的module所对应build.gradle中添加如下依赖: provided files('libs/classes-full-debug.jar') 也可以图形化设置: ...
- Android中调用系统所装的软件打开文件(转)
Android中调用系统所装的软件打开文件(转) 在应用中如何调用系统所装的软件打开一个文件,这是我们经常碰到的问题,下面是我所用到的一种方法,和大家一起分享一下! 这个是打开文件的一个方法: /** ...
- 大叔也说Xamarin~Android篇~调用远程API接口,发POST请求
回到目录 Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应, ...
- android中调用系统的发送短信、发送邮件、打电话功能
1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:"); Intent sendIntent = new Intent(Intent.ACT ...
- [Android Pro] 调用系统相机和图库,裁剪图片
private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照 private static final int PHOTO_REQUEST_GA ...
- 关于Android studio调用高德地图的简单流程和要点
一,账号与Key的申请 注册成为高德开发者需要分三步: 第一步,注册高德开发者:第二步,去控制台创建应用:第三步,获取Key. 前2步都比较简单,这里说下第三步. 获取Key 1.进入控制台,创建一个 ...
- android intent调用系统camera
利用android的camera通常有两种方式:利用intent调用系统的camera,或者结合surfaceview实现自己定制的camera.先分别对这两种方法说明如下: 一.使用系统自配的cam ...
随机推荐
- "Mathematical Analysis of Algorithms" 阅读心得
"Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms" ...
- 当初对"软件工程"这个专业的期待和想象是什么?
很多期待,很多幻想 印象很深刻的初中语文老师让我们背诵的一首诗<错误>: <错误> 作 者:郑愁予 我打江南走过 那等在季节里的容颜如莲花的开落 东风不来,三月的柳絮不飞 你底 ...
- 浅谈JVM - 内存结构(二)- 虚拟机栈|凡酷
2.1 定义 Java Virtual Machine Stacks(Java虚拟机栈) Java 虚拟机栈描述的是 Java 方法执行的内存模型,用于存储栈帧,是线程私有的,生命周期随着线程启动而产 ...
- 后台用Hbase对表单数据实现增删改查遇到的问题
1.无法解析jsp 原因:hbase中lib下jar包会与tomcat包冲突,需要删除与tomcat冲突的包 这是我删除的几个包 之后运行就没有问题了 2.对于Hbase修改的问题 在添加数据时,HB ...
- 【转】Rendering Problems The following classes could not be instantiated
xml 设计时警告 打开es/values/目录下styles.xml文件. 把:<style name="AppTheme" parent="Theme.AppC ...
- Linux--Centos下搭建Git服务器
参考:http://kimi.it/370.html http://blog.csdn.net/wave_1102/article/details/47779401 开始直接用 yum insta ...
- JavaScript详解(三)
JavaScript的数组 JavaScript中的数组具有相当的灵活性,除了能存储数据外,还提供了一系列的属性和方法.因为JavaScript本身是一个弱类型语言,故其数组不会限制存放数据的类型. ...
- 刘永富的Office/VBA/VSTO开发资源分享
各种常用安装包下载:https://share.weiyun.com/5PCvqY4 简称 文件名称 描述信息 视频课程 虚拟光驱软件Daemon DAEMON_Tools_Lite_V10.1.0. ...
- Linux Man手册的使用示例
转载自:https://blog.csdn.net/ac_dao_di/article/details/54718710 Linux的命令非常多,很多人在学一个命令时,首先想到的是使用百度或者谷歌,或 ...
- 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域
本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...