我有一组自定义等文件,包括文本文件、二进制数据文件,我希望将它们填充到 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 构建。
将vendor/XXXX文件夹中的文件替换为最新版本并启动构建(m -j8)。不到5分钟就完成了搭建。
新的系统映像已创建。但是,更改不会在模拟器中更新。但是,当我删除 out 文件夹并再次尝试构建时,一切都会正常。完成构建需要 3-4 小时。
任何人都知道为什么第一次不起作用的原因。
qemu android-emulator android-build android-source android-make
我在网上找到了几个这个问题,但从来没有一个好的答案。让我具体说明所提出的问题。
我想构建一款仅包含一个应用程序的自定义 Android ROM。该应用程序不与任何硬件交互(目前)。该应用程序将在设备启动时启动。没有锁屏。如果应用程序出现故障,设备将必须重新启动。
一位资源告诉我,你可以更改ROM 的启动器应用程序。
-> 这是否意味着显示手机上所有应用程序的主屏幕只是另一个应用程序?如果是这样,您可以按照此处所述简单地更改启动器应用程序吗?如果这个应用程序失败会发生什么?
如果真是这样的话,那么整个问题就解决了。
如果没有,您如何着手制作此类项目?这包括
预先感谢您的任何回复
我正在开发一个应用程序,它严重依赖 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 源代码,我将不胜感激。
背景:我正在使用 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
在文档中它说的是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) 当我尝试将自定义 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) 我编译了自己的 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)
我知道我不需要自己指定 .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 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) 我正在探索有关 PackageManager 的Android 多用户行为。\nI\xe2\x80\x99m 试图了解如何在每个用户中安装软件包以及如何在所有用户中实现安装。
\n找不到为所有用户安装软件包的方法,只能为当前用户安装软件包。使用我的示例应用程序在 Android 11 模拟器 (AOSP) 中进行测试,该应用程序使用 PackageInstaller 安装软件包。
\n我能够测试什么:
\n据我所知,我只是参考我在官方 Android 文档中找到的内容,我找不到一种以编程方式在所有用户中安装软件包的方法。另外,我找不到列出设备中安装的所有软件包的方法(不是在当前用户中,而是在设备中)。
\n既然您知道了我的调查状况,也许有人可以帮助我提供一些官方声明或解决方法。
\n1. 有没有办法(以编程方式)列出设备中所有已安装的软件包,而不依赖于当前用户?
\n2. …
android-source ×10
android ×7
android-11 ×2
qemu ×2
adb ×1
android-make ×1
android-ndk ×1
android-x86 ×1
android.mk ×1
apk ×1
emulation ×1
installation ×1
java ×1
libvlc ×1
linux-kernel ×1
multi-user ×1
rom ×1