问题描述
我正在尝试使用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文件之间的依赖关系