美文网首页
使用 hideApi SystemApi 在 Android S

使用 hideApi SystemApi 在 Android S

作者: 他晓 | 来源:发表于2022-03-02 22:21 被阅读0次

使用 hideApi SystemApi 在 Android Studio 中开发系统级 APP

欢迎入群交流
QQ群:686809487

获取 jar 包

GitHub:

https://github.com/anggrayudi/android-hidden-api

从安卓源码获取:

out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/

添加 jar 包到 Android Studio
systemapi_01.png
app 的 build.gradle 配置
dependencies {
//    implementation fileTree(dir: "libs", include: ["*.jar"])
 compileOnly files('libs/mini_framework.jar')
}
  • api 或 compile 关键字引用的包对于其他 module 来说是可见的

  • implementation 关键字引用的包对于其他 module 来说是不可见的

  • compileOnly 只需要参与编译,而不需要将 mini_framework.jar 的内容编译进 apk 中

preBuild {
 doLast {
 def imlFile = file("../.idea/modules/app/app.iml")
 println('preBuild file exists:' + imlFile.exists())
 if (imlFile.exists()) {
 try {
 println('preBuild start')
 def parsedXml = (new XmlParser()).parse(imlFile)
 def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
 parsedXml.component[1].remove(jdkNode)
 def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
 new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])

//                def settingslibName ='Gradle: ./app/libs/settingslib.jar'
//                def jdkNode1 = parsedXml.component[1].orderEntry.find { it.'@name' == settingslibName }
//                parsedXml.component[1].remove(jdkNode1)
//                new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'library', 'name': settingslibName, 'level': 'project'])

 groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
 println('preBuild end')
 } catch (Exception e) {
 println('preBuild Exception:' + e.getMessage())
 }
 }
 }
}

此方法是优先加载 libs 下的 jar 包,实际过程中此方法不需要

使用此方法会将系统的 API 加载放到最后

在这里插入图片描述
根目录下的 build.gradle 配置
allprojects {
 repositories {
 google()
 jcenter()
 mavenCentral()
 }

 def path = getRootDir().getAbsolutePath() + '\\app\\libs\\mini_framework.jar'
 gradle.projectsEvaluated {
 tasks.withType(JavaCompile) {
 options.compilerArgs.add('-Xbootclasspath/p:' + path)
//            options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\settingslib.jar')
 println('bootpath:' + path)
 }
 }
}
签名成系统包

用到的文件

platform.pk8、platform.x509.pem、signapk.jar、libconscrypt_openjdk_jni.so

  • 在 AndroidManifest 中添加
   android:sharedUserId="android.uid.system"
  • 在 android 系统目录 build/target/product/security/拷贝系统签名文件

    platform.x509.pem、platform.pk8

  • 在 out/host/linux-x86/framework 目录下找到 signapk.jar 文件;

  • 在 out/host/linux-x86/lib64 下拷贝 libconscrypt_openjdk_jni.so 文件;

  • 将以上文件放到同一文件夹下,并将需要系统签名的 apk 也放在同一文件夹

  • 进入该文件目录下执行以下命令即可完成签名

    java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app.apk 
    app_sign.apk

微信公众号【他晓】,关注并转发,谢谢

相关文章

网友评论

      本文标题:使用 hideApi SystemApi 在 Android S

      本文链接:https://www.haomeiwen.com/subject/vrgerrtx.html