AndroidStudio使用参考

1. 导入project

平台应用不是用gradle来编译app,所以需要导入AndroidStudio所需的工具。

平台应用所在目录:vendor/sigmastar/common/apps/

导入方法如下:

导入后会报如下错误:

原因是因为1的连接无法打开导致找不到com.android.tools.build:gradle:7.3.1.

解决方法是点击2,重新生成build.gradle文件:

点击Do Refactor后实际上就是在build.gradle的文件中添加google()

所以直接在build.gradle里面添加google()也可以解决问题:

2. 添加依赖包

导入系统应用后,会报依赖库出错,需要根据Android.bp文件中的内容添加依赖库。

2.1. 导入framework系统包方法

如果有调用到framework隐藏的系统api,则需导入framework系统jar包。

  1. 在android源码中找到framework包路径:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-header.jar

    添加到如下路径:

  2. 解压framework包:

  3. 修改项目gradle添加framework.jar依赖path:

    gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        Set<File> fileSet = options.bootstrapClasspath.getFiles()
        List<File> newFileList = new ArrayList<>();
        //相对位置,根据存放的位置修改路径
        newFileList.add(new File("./app/libs/classes-header.jar"))
        newFileList.addAll(fileSet)
        options.bootstrapClasspath = files(
                newFileList.toArray()
        )
        }
    }
    
  4. 修改app gradle添加compileOnly config:

    compileOnly files('libs\\classes-header.jar')
    

2.2. 更新和导入sstar包(SDK)方法

2.2.1. 更新sstar包(SDK)

SystemControl作为提供给上层应用配置底层驱动的中间件,它可由三个部分组成,一部分是被打进上层应用apk的静态库;一部分是SystemControlService;一部分是systemcontrol hal。

直接提供给上层应用的接口是SystemControlManager。这一部分代码路径在vendor/sigmastar/common/app/SStarSystemControl/lib下,将会以静态库的形式被打进上层应用的apk,它会帮应用搭建一个与SystemControlService的binder通信。SystemControlManager在Android.bp编译成library,最终会以SDK的方式提供给上层应用使用,具体文件为com.sstar.systemcontrol.lib.jar

Systemcontrol 系统服务所在位置:

vendor\sigmastar\common\apps\SStarSystemControl

java_library {
    name: "com.sstar.systemcontrol.lib",
    sdk_version: "system_current",

    srcs: [
        "lib/**/*.java",
        "src/**/I*.aidl",
    ],
}

如果要生成最新的com.sstar.systemcontrol.lib.jar, 需要重新编译SStarSystemControl,然后out目录下生成相应的jar包。

注意:如果hal层vendor.sstar.hardware.systemcontrol接口有改动,那么相应的SystemControlService也需要改动。

2.2.2. 导入sstar(sdk)包

  1. 在android源码中找到sstar相关包路径

    上层App应用调用systemcontrol接口的SDK包:

    out\soong\.intermediates\vendor\sigmastar\common\apps\SStarSystemControl\com.sstar.systemcontrol.lib\android_common\javac\com.sstar.systemcontrol.lib.jar
    

    systemcontrol服务调用aidl接口的jar包:

    out\soong\.intermediates\vendor\sigmastar\interfaces\systemcontrol\aidl\vendor.sstar.hardware.systemcontrol-V1-java\android_common\javac\vendor.sstar.hardware.systemcontrol-V1-java.jar
    
  2. 解压sstar包

    跟解压framework包操作一样

2.3. 其它依赖包

android-support-v4/ android-support-v7/androidx等依赖包在out/soong/ /.intermediates/prebuilts/sdk/current/目录下,比如android-suppor-v4在out/soong/ intermediates/prebuilts/sdk/current/support/android-support-v4/android_common/javac/android-support-v4.jar

3. 添加系统签名

系统签名主要是给外部apk开发签名使用,使应用具有系统权限。有时候我们需要实现如静默升级或安装应用之类的系统级功能的时候,我们除了需要将应用预装为系统应用之外,还需要使用系统签名对我们的应用进行签名。

系统签名文件目录:

build/make/target/product/security

系统签名生成步骤:

1、将存储密钥的加密的platform.pk8转为可见的platform.pem,现在可以执行以下命令生成:

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

2、将存储证书的platform.x509.pem和存储密钥的platform.pem生成加密后的platform.p12文件,设置对应的密码和alias名(app签名使用到)

openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:密码 -name 名称

3、将platform.p12转为as所需的platform.keystore(app使用的签名文件)

keytool -importkeystore -deststorepass 密码 -destkeystore ./platform.keystore -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 密码

platform.keystore拷贝到app工程目录下设置alias名和密码即可

AndroidStudio 导入platform.keystore:

添加完系统签名,在AndroidManifest.xml里面添加android:sharedUserId="android.uid.system"权限

4.修改sdk和应用版本号

如果系统之前的没有设置版本,需修改如下版本号:

修改完成后,重新编译apk就可以在板子跑了: