标签: android-source

将自定义 etc 文件添加到 aosp 构建中

我有一组自定义等文件,包括文本文件、二进制数据文件,我希望将它们填充到 aosp 的 system/etc 文件夹中。

我看到上一个问题将 custom.xml 文件添加到 AOSP 等文件夹,该问题类似,但不是我想要做的。

我尝试过: mkdir external/mydata

然后在 android.mk 中,我输入:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := mydata.xml
LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_CLASS := ETC

# This will install the file in /system/etc/permissions
#
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,作为起点,我想将 mydata.xml 添加到 system/etc/ 。然后我使用正常的 m -j1 iso_img 进行构建

我可以看到 ninja 选择了运行 kati 来生成 build-android_x86.ninja... ./external/mydata/Android.mk 已修改,正在重新生成...

但我没有看到 mydata.mxl 在任何地方填充。

$ find out/-name mydata.xml

回来却空空如也...

有任何想法吗?我正在使用 android-x86 aosp 构建。

android android-source android-x86 android.mk

5
推荐指数
1
解决办法
1843
查看次数

AOSP 构建未采用供应商文件夹中的最新更改

将vendor/XXXX文件夹中的文件替换为最新版本并启动构建(m -j8)。不到5分钟就完成了搭建。
新的系统映像已创建。但是,更改不会在模拟器中更新。但是,当我删除 out 文件夹并再次尝试构建时,一切都会正常。完成构建需要 3-4 小时。

任何人都知道为什么第一次不起作用的原因。

qemu android-emulator android-build android-source android-make

5
推荐指数
0
解决办法
1389
查看次数

单应用定制Android ROM

我在网上找到了几个这个问题,但从来没有一个好的答案。让我具体说明所提出的问题。

我想构建一款仅包含一个应用程序的自定义 Android ROM。该应用程序不与任何硬件交互(目前)。该应用程序将在设备启动时启动。没有锁屏。如果应用程序出现故障,设备将必须重新启动。

一位资源告诉我,你可以更改ROM 的启动器应用程序。

-> 这是否意味着显示手机上所有应用程序的主屏幕只是另一个应用程序?如果是这样,您可以按照此处所述简单地更改启动器应用程序吗?如果这个应用程序失败会发生什么?

如果真是这样的话,那么整个问题就解决了。

如果没有,您如何着手制作此类项目?这包括

  • 在 AOSP 上制作应用程序
  • 拒绝用户离开应用程序或与其他任何东西交互
  • 使该应用程序成为启动过程的一部分
  • 删除锁定屏幕
  • 使应用程序成为操作系统的依赖项(如果出现故障则强制关闭)

预先感谢您的任何回复

java android rom android-source

5
推荐指数
1
解决办法
2116
查看次数

jobScheduler 节流规范 Android 11 (api 30)

我正在开发一个应用程序,它严重依赖 jobScheduler 在后台执行多个任务。从下一个 api 版本(android11、api 30)开始,文档(以及开发者预览版)指出:

JobScheduler will throttle runaway applications. Calling schedule(android.app.job.JobInfo) and other such methods with very high frequency is indicative of an app bug and so, to make sure the system doesn't get overwhelmed, JobScheduler will begin to throttle apps that show buggy behavior, regardless of target SDK version.
Run Code Online (Sandbox Code Playgroud)

但我找不到任何关于 jobScheduler 的“正常”使用的规范。

我尝试查找源代码,但在 AOSP 下找不到 android11 分支,并且在build-numbers列表下没有提及它。

他们确实提供了一个模拟器版本来执行测试,但我更喜欢知道我的边界(而不是执行一系列测试只是为了弄清楚这些数字是什么)。

如果有人能给我指出功能规格或 android11 源代码,我将不胜感激。

android-source android-jobscheduler android-11

5
推荐指数
0
解决办法
909
查看次数

Android 10:更新内核模块

背景:我正在使用 Pixel 4,build QQ2A.200501.001.B2,它是 Android 10。当我从官方源构建内核并刷新它时,触摸屏、WLAN 和其他功能不起作用。我追踪到这个事实是内核模块/vendor/lib/modules没有更新,因此新内核无法加载它们中的任何一个。我尝试仅刷新boot.img整个 AOSP,同样的问题,它们没有更新。我可以通过手动将我构建的内核模块推送到设备并按insmod正确的顺序手动加载它们来解决此问题。

所以我的问题是:

  • 为什么他们不首先更新?
  • 当我刷新时如何将它们与内核一起更新?
  • 或者,如何在刷新后永久更新它们?

当然必须有一种“官方”方式来做到这一点?内核模块通常是如何部署的?


一些注意事项:

我无法将它们推送到/vendor/lib/modules,因为我无法重新/vendor挂载可写:

flame:/ # mount -o rw,remount /vendor                                                                                                                                                   
'/dev/block/dm-5' is read-only
Run Code Online (Sandbox Code Playgroud)

禁用dm-verity似乎没有帮助。

我注意到 AOSP 源包含 中的所有模块/vendor/lib/modules,位于它采用内核映像形式的同一位置(在我的例子中是device/google/coral-kernel)。因此,很自然地,我尝试用我构建的模块替换那里的模块,但是在构建和刷新之后,我发现其中/vendor/lib/modules仍然包含旧模块。

AOSP 文档说不再boot.img包含 ramdisk,它现在位于system分区中。另外,OverlayFS如果我没读错的话,应该使用“供应商覆盖”来更新那里的文件。但是,在我的设备上,没有product/vendor_overlay像文档所说的那样的目录,只有product/overlay/. 我也不确定这是否是解决这个问题的正确方法,或者我将如何在我的情况下创建这样的覆盖。

谢谢

android kernel-module linux-kernel android-source android-kernel

5
推荐指数
1
解决办法
2555
查看次数

UiAutomation 与 AccessibilityService

文档中它说的是UiAutomation

用于通过模拟用户操作和自省屏幕内容与设备的 UI 进行交互的类。它依赖于平台辅助功能 API 来检查屏幕并在远程视图树上执行一些操作。它还允许注入任意原始输入事件,模拟用户与键盘和触摸设备的交互。人们可以将 UiAutomation 视为一种特殊类型的 AccessibilityService,它不提供服务生命周期的挂钩,并公开对 UI 测试自动化有用的其他 API。

此类公开的 API 是低级的,以便在开发 UI 测试自动化工具和库时最大限度地提高灵活性。一般来说,UiAutomation 客户端应该使用更高级别的库或实现高级功能。例如,在屏幕上执行点击需要构建和注入触摸向下和向上事件,这些事件必须通过调用injectInputEvent(android.view.InputEvent, boolean)传递到系统。

此类公开的 API 可以跨应用程序运行,使客户端能够编写涵盖跨多个应用程序的用例的测试。例如,转到设置应用程序以更改设置,然后与行为取决于该设置的另一个应用程序进行交互。

UiAutomation与常规的到底有什么不同,因为它在源代码AccessibilityService中没有继承它。

public final class UiAutomation {
    private static final String LOG_TAG = UiAutomation.class.getSimpleName();
    // omitted the rest...
Run Code Online (Sandbox Code Playgroud)

android android-source android-uiautomator

5
推荐指数
1
解决办法
1211
查看次数

通过 ADB 加载 Android APK 时出错 - StorageManager.getVolumes()' 在空对象引用上

当我尝试将自定义 APK 加载到 Android 上时,出现以下错误。这是一个空的测试服务。

谢谢,

-埃里克

adb: failed to install test.apk:

Exception occurred while executing:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List android.os.storage.StorageManager.getVolumes()' on a null object reference

        at com.android.internal.content.PackageHelper.resolveInstallVolume(PackageHelper.java:186)

        at com.android.internal.content.PackageHelper.resolveInstallVolume(PackageHelper.java:150)

        at com.android.internal.content.PackageHelper.resolveInstallVolume(PackageHelper.java:165)

        at com.android.server.pm.PackageInstaller
Run Code Online (Sandbox Code Playgroud)

android adb android-ndk android-source android-debug

5
推荐指数
0
解决办法
351
查看次数

如何使用我自己的.img分区启动android模拟器?

我编译了自己的 AOSP 镜像并得到了这个:

lz@vm:/mnt/android-dev-3/aosp/grapheneos-lz_experiments/out/target/product/generic_x86_64$ ls *.img 
cache.img          ramdisk.img       system.img       vendor_boot-debug.img
dtb.img            ramdisk-qemu.img  system-qemu.img  vendor_boot.img
encryptionkey.img  super_empty.img   userdata.img     vendor.img
ramdisk-debug.img  super.img         vbmeta.img       vendor-qemu.img
Run Code Online (Sandbox Code Playgroud)

然后我编译了我自己的Android模拟器

我知道我不需要自己指定 .img,AOSP 预构建模拟器就可以工作,但我想用于其他目的。

所以我做了DIR_OUT = /mnt/android-dev-3/aosp/grapheneos-lz_experiments/out/target/product/generic_x86_64

./emulator -sysdir $DIR_OUT/system -datadir $DIR_OUT/data -kernel $DIR_OUT/kernel-ranchu -ramdisk $DIR_OUT/ramdisk.img -system $DIR_OUT/system.img -data $DIR_OUT/userdata.img -cache $DIR_OUT/cache.img -vendor $DIR_OUT/vendor.img
emulator: ERROR: No AVD specified. Use '@foo' or '-avd foo' to launch a virtual device named 'foo'
emulator: WARNING: userdata partition is resized from 550 M to 800 M

emulator: WARNING: …
Run Code Online (Sandbox Code Playgroud)

android qemu emulation android-source

5
推荐指数
1
解决办法
4329
查看次数

如何使用 Android.bp 解决依赖项缺失的变体 arch:common 问题?

最初,该依赖项包含在 Android 9 的 Android.mk 文件中。该模块可以编译并运行,不会出现任何构建错误。

迁移到 Android 11 时,必须将依赖项“libvlc”添加到 Android.bp static_libs 中。

 android_app {

   compile_multilib: "both",

   static_libs: [
    " libvlc",
    ...
   ],
 }

cc_prebuilt_library_shared {
    name: "libvlc",
    srcs: ["libs/libvlc.so"],
    vendor: true,
}
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

  dependency "libvlc" of "MyModule" missing variant:

  os:android, arch:common

available variants:
  os:android, image:vendor.30, arch:arm64_armv8-a_cortex-a53, sdk:, link:shared, version:

  os:android, image:vendor.30, arch:arm64_armv8-a_cortex-a53, sdk:, link:static, version:

  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:shared, version:

  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:static, version:

14:54:21 soong bootstrap failed with: exit status 1

#### failed to build …
Run Code Online (Sandbox Code Playgroud)

android-source libvlc android-soong android-11

5
推荐指数
0
解决办法
2051
查看次数

Android多用户行为:如何为所有用户安装应用程序包

我正在探索有关 PackageManager 的Android 多用户行为。\nI\xe2\x80\x99m 试图了解如何在每个用户中安装软件包以及如何在所有用户中实现安装。

\n

找不到为所有用户安装软件包的方法,只能为当前用户安装软件包。使用我的示例应用程序在 Android 11 模拟器 (AOSP) 中进行测试,该应用程序使用 PackageInstaller 安装软件包。

\n

我能够测试什么:

\n
    \n
  • 将我的示例应用程序作为系统应用程序,因此它将具有安装和删除包的受限权限,并且它将显示在每个用户中
  • \n
  • 创建新用户并在它们之间切换
  • \n
  • 列出当前用户安装的所有应用程序包
  • \n
  • 使用我的示例应用程序,为当前用户安装包。我正在使用PackageInstaller.Session来成功实现这一目标。
  • \n
  • 使用用户 A 安装软件包 X,切换到用户 B,我在应用程序中看不到软件包 X,但是我能够在用户 B 上安装相同的软件包 X
  • \n
  • 无法安装同一软件包(相同软件包名称)的较低版本。(在用户 A 上安装软件包 X,verCode=2,切换到用户 B 并尝试安装软件包 X,verCode=1)。不过我可以安装 vercode >= 的软件包
  • \n
  • 用户 B 看不到用户 A 安装的内容
  • \n
  • 在 Android Studio (AS) 设备资源管理器的帮助下,我能够找到位于此处的已安装包元数据 (apk):/data/app/[一些奇怪的哈希值]/[应用程序的包名称]
  • \n
  • 在 AS 设备资源管理器的帮助下,我能够找到专用于每个用户的每个包的数据文件夹:/data/user/[用户 ID]/[应用程序的包名称]
  • \n
\n

据我所知,我只是参考我在官方 Android 文档中找到的内容,我找不到一种以编程方式在所有用户中安装软件包的方法。另外,我找不到列出设备中安装的所有软件包的方法(不是在当前用户中,而是在设备中)。

\n

既然您知道了我的调查状况,也许有人可以帮助我提供一些官方声明或解决方法。

\n

1. 有没有办法(以编程方式)列出设备中所有已安装的软件包,而不依赖于当前用户?

\n

2. …

installation android multi-user android-source apk

5
推荐指数
0
解决办法
1830
查看次数