使用soong进行AOSP构建失败

问题描述

我正在尝试使用soong使用预安装的系统应用程序构建Android开源项目汽车映像。 android系统应用程序是用Kotlin编写的。

Android.bp

android_app {
    name: "Carapp",srcs: ["src/**/*.kt","src/**/*.java"],resource_dirs: [
     "res/"
    ],libs: [
     "telephony-common",],certificate: "platform",privileged: true,platform_apis: true,optimize: {
        enabled: false,},dex_preopt: {
        enabled: false,static_libs: [
     "android.car","androidx.recyclerview_recyclerview","androidx.recyclerview_recyclerview-selection","androidx.preference_preference","androidx-constraintlayout_constraintlayout","android-support-design"
     ],plugins: ["dagger2-compiler-2.19"],}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media.mycarapp">

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-permission android:name="android.car.permission.CAR_SPEED" />
    <uses-permission android:name="android.car.permission.CAR_POWERTRAIN" />
    <uses-permission android:name="android.car.permission.CAR_ENERGY" />

    <application 
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
        <activity android:name=".SetupOptionsList"></activity>
        <activity android:name=".StatusActivity"></activity>
        <activity android:name=".SetupActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

当我尝试使用这些文件进行构建时,我得到了

/out/soong/.intermediates/packages/apps/Car/Carapp/Carapp/android_common/manifest_fixer/AndroidManifest.xml:21:18-86 Error:
    Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from AndroidManifest.xml:21:18-86
    is also present at AndroidManifest.xml:21:18-91 value=(android.support.v4.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:12:5-23:19 to override.

'tools:replace =“ android:appComponentFactory” 添加到AndroidManifest.xml后,在构建应用程序时出现未绑定的前缀错误错误如下。

out/soong/host/linux-x86/bin/manifest_fixer --minSdkVersion 30 --targetSdkVersion 30 --raise-min-sdk-version --extract-native-libs=true --uses-non-sdk-api packages/apps/Car/JulioApp/AndroidManifest.xml o
ut/soong/.intermediates/packages/apps/Car/Carapp/Carapp/android_common/manifest_fixer/AndroidManifest.xml
error: unbound prefix: line 13,column 4 

如何解决此问题?

解决方法

@Pie-AOSP绝对是公共领域。

如果您专门尝试使用soong构建此代码,则此答案不适合您。但是下面我将介绍一种替代方法。

您不需要在AOSP中构建kotlin代码。在Android Studio中构建APK,使用系统证书签名,然后在也许~/AOSP/packages/apps/<your-app>下创建一个文件夹,并在其中添加两个文件。您将找到有关如何向AOSP添加APK的许多不同SO问题的确切信息。因此,您将创建Android.mk文件并将该apk文件放在此处。在您的mk文件中,您会提到它是预先签名的。

接下来,您将在device.mk中将此软件包名称添加为PRODUCT_PACKAGES += <PACKAGE_NAME>。这将包括该应用程序作为设备上的系统应用程序。无需其他步骤,您也可以在/system/priv-app下找到该应用。

根据情况,您可能还需要priv-app-permissions.xml并添加如下内容:

PRODUCT_COPY_FILES += \
                    $(LOCAL_PATH)/root/privapp-permissions-<DEVICE>.xml:system/etc/permissions/privapp-permissions-<DEVICE>.xml

将应用程序添加到AOSP构建中(无法链接,但可以在SO上搜索)

  • 如何在AOSP中添加应用程序?
  • 如何将第3方库添加到Android AOSP版本中?
  • 将外部JAR添加到Android AOSP版本时出错
  • 如何解决错误:此属性必须本地化。 (在“文本”中,值为“ TOP_LEFT”)
  • X(java:sdk)不应链接到Y(java:platform)
  • 将libs /中的jar文件添加到Android.mk
  • 在AOSP App中将一个Android项目添加为库
  • 默认启动器:如何在AOSP构建中设置默认启动器?
  • 将本地服务添加到aosp
  • 在android源代码中构建特定模块
  • 两个Android.mk文件之间的依赖关系