zoukankan      html  css  js  c++  java
  • 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_SOURCEouthostlinux-x86frameworksignapk.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");
  • 相关阅读:
    1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
    camera 3A算法
    fatal: unable to access 'https://github.com/XXXX.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
    mysql判断表是否存在
    工具网站
    HSSFWorkbook实现导入导出
    mysql缓存问题 相关参数的查看
    mysql日期转换格式
    Java8新特性之Lambda表达式
    国产浏览器
  • 原文地址:https://www.cnblogs.com/alanfang/p/8866490.html
Copyright © 2011-2022 走看看