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 ...
随机推荐
- 37. docker swarm docker service 的更新
在service 运行的情况下 进行更新 1. 创建 名为 demo 的 overlay 网络 docker network create -d overlay demo 2. 创建 python-f ...
- TF分布式问题
碰到一个没解决的问题. 用tensorflow 分布式异步更新模式训练模型, 模型中带正则项, 每个batch的损失函数为 \[\lambda \|W\|_1 + \frac 1 {N_j} \sum ...
- 同时运行两个版本相同的tomcat
由于项目需要,代理集群和一个节点都部署在本地,那么就需要有两个tomcat,一个部署集群,一个部署项目,我都用了7.0.34版本的tomcat 当启动代理的tomcat成功时,再启动节点的tomcat ...
- 应用gis笔记
接口,开发包??我要做一个移动端的,完了之后和5G挂一下钩, web/桌面/移动 C#就是.NET.... 和专业程序设计课程的区别 a kind of boring hope it helpful, ...
- 关于maven的使用总结
maven介绍 项目构建过程 eclipse只是开发工具,虽然提供了创建.编码.编译.测试.运行等功能,但并不是项目构建工具. 项目构建主要过程如下: 实际的项目构建过程要复杂繁琐的多.如果是一个独立 ...
- Codeforces Round #624 (Div. 3)(题解)
A. Add Odd or Subtract Even 思路: 相同直接为0,如果两数相差为偶数就为2,奇数就为1 #include<iostream> #include<algor ...
- 实现迭代器(\_\_next\_\_和\_\_iter\_\_)
目录 实现迭代器(__next__和__iter__) 一.简单示例 二.StopIteration异常版 三.模拟range 四.斐波那契数列 实现迭代器(__next__和__iter__) 一. ...
- maven仓库镜像、私服与jdk版本配置
--配置全局镜像,setting.xml <mirrors> <mirror> <id>alimaven</id> <name>aliyun ...
- PAT甲级——1152.Google Recruitment (20分)
1152 Google Recruitment (20分) In July 2004, Google posted on a giant billboard along Highway 101 in ...
- Opencv笔记(十三)——图像的梯度
目标 认识图像梯度.边界 学习函数cv2.Sobel(),cv2.Schar(),cv2.Laplacian() 原理 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导.Op ...