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的更多相关文章

  1. Android Studio搭建系统App开发环境

    一.前言 在Android的体系中开发普通app使用Android Studio这一利器会非常的方便.但是开发系统app可能就会有些吃力,不过经过一些配置仍然会 很简单.我们知道系统app因为涉及到一 ...

  2. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  3. Android Studio 导入系统 jar包

    1.当前需要导入系统jar包的module所对应build.gradle中添加如下依赖: provided files('libs/classes-full-debug.jar') 也可以图形化设置: ...

  4. Android中调用系统所装的软件打开文件(转)

    Android中调用系统所装的软件打开文件(转) 在应用中如何调用系统所装的软件打开一个文件,这是我们经常碰到的问题,下面是我所用到的一种方法,和大家一起分享一下! 这个是打开文件的一个方法: /** ...

  5. 大叔也说Xamarin~Android篇~调用远程API接口,发POST请求

    回到目录 Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应, ...

  6. android中调用系统的发送短信、发送邮件、打电话功能

    1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:");  Intent sendIntent = new Intent(Intent.ACT ...

  7. [Android Pro] 调用系统相机和图库,裁剪图片

    private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照 private static final int PHOTO_REQUEST_GA ...

  8. 关于Android studio调用高德地图的简单流程和要点

    一,账号与Key的申请 注册成为高德开发者需要分三步: 第一步,注册高德开发者:第二步,去控制台创建应用:第三步,获取Key. 前2步都比较简单,这里说下第三步. 获取Key 1.进入控制台,创建一个 ...

  9. android intent调用系统camera

    利用android的camera通常有两种方式:利用intent调用系统的camera,或者结合surfaceview实现自己定制的camera.先分别对这两种方法说明如下: 一.使用系统自配的cam ...

随机推荐

  1. python-day1 爬虫基础之HTTP基本原理

    经过前几天的开发环境配置,今天终于正式开启学Python之路了,今天主要看了HTTP的基本原理,下边做一个总结: 1.首先要了解的就是URI和URL,URI的全拼是Uniform Resource I ...

  2. Tooltips

    #include<windows.h> #include<Commctrl.h> #include"resource.h" #pragma comment( ...

  3. vue 中使用print.js 打印遇到的问题 ?

    不管怎么设置打印部分的 margin和height 仍会在预览时多出一张空白页?求各位大佬遇到过的请留言谢谢!

  4. SEO优化技巧

    一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果.深究其背后的故事,搜索引擎做了很多事情. 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关 ...

  5. Prometheus监控系统之入门篇(一)

    1. 简介 Prometheus: (简称Prom)是由SoundCloud开发的开源监控报警系统.是大名鼎鼎的CNCF云原生基金会下的第二大开源项目.具有如下特点: 使用Go语言开发 内置时序数据库 ...

  6. 34)static 静态成员和静态成员函数

    1) static修饰的方法,只能在这个文件中使用,比如你是多文件编程,别的文件即使引入了我的 .h文件  但那时我的static方法也是不能用 2)C++的static的成员变量   比如  sta ...

  7. Oracle数据库添加删除主外键

    (一)添加主键 1.表创建的同时,添加主键约束 语法: create table "表名" ( "列名1" 数据类型及长度 constraint "主 ...

  8. 记录几个windows常用的快捷键和命令

    1.打开文件夹 win+E 2.关闭当前窗口 ctrl+w 3.切换窗口 alt+tab 4.输入命令窗口 win+r 5.注册表的快捷键 regedit 6.打开远程 mstsc 7.命令设置开机启 ...

  9. SLAM——视觉里程计(一)feature

    从现在开始下面两篇文章来介绍SLAM中的视觉里程计(Visual Odometry).这个是我们正式进入SLAM工程的第一步,而之前介绍的更多的是一些基础理论.视觉里程计完成的事情是视觉里程计VO的目 ...

  10. 吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率

    ,除了部分指标主观和难以测量外,该数据还存在一个问题,数据集中有 30%的值是缺失的.下面将首先介绍如何处理数据集中的数据缺失问题,然 后 再 利 用 Logistic回 归 和随机梯度上升算法来预测 ...