我有一个蓝牙HID设备,我需要得到工作与在Android 5.0分叉一台Nexus 7平板电脑2013运行自定义生成运行我的应用程序。所以:
@hide 不是约束现在我的设备有一个键盘,并且发送和接受一些供应商特定的 HID 报告。通过工作,我的意思是发送和接收所有 HID 报告
基于我所做的 AOSP 源代码探索,似乎:
该HidService服务广播BluetoothInputDevice.ACTION_REPORT所有输入 HID 报告的意图 [我的应用程序有一个BroadcastReceiver接收ACTION_REPORT意图]
BluetoothInputDevice提供了其他的接口等setReport(),sendData(),connect()通过等HidService。
BluetoothInputDevice用于HidService提供 HID 设备接口。
HidService.java 是一个 JNI 包装器 com_android_bluetooth_hid.cpp
com_android_bluetooth_hid.cpp,在 初始化时HidService,将自己的回调注册到 Bluedroid
我已将日志添加到 AOSP 以跟踪调用,似乎以上所有内容都是正确的。
但
在get_report_callback()中com_android_bluetooth_hid.cpp不会被调用,因此,我的应用程序不接收ACTION_REPORT意向。
如果我ACTION_REPORT从我的应用程序发送虚拟意图,那么我BroadcastReceiver …
我有一个 RK3288 盒子,我正在为它开发一个应用程序。
我遇到了一个让我很头疼的问题。我无法调试任何东西。
每次我附加调试器时,当我遇到主线程上的断点时,我的应用程序会在几秒钟后崩溃。以下是发生这种情况时的 logcat:
05-02 20:52:39.734 459-534/system_process I/InputDispatcher: Application is not responding: Window{3026b626 u0 com.kushtrim.playground/com.kushtrim.playground.MainActivity}. It has been 5001.8ms since event, 5001.6ms since wait started. Reason: Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 17. Wait queue head age: 5505.1ms.
05-02 20:52:39.794 459-534/system_process I/WindowManagerService: Input event dispatching timed out sending to com.kushtrim.playground/com.kushtrim.playground.MainActivity. Reason: Waiting to send non-key event because …Run Code Online (Sandbox Code Playgroud) 我packages/apps在 Android O 的供应商目录下有一个应用程序。该应用程序依赖于 HIDL 接口,该接口作为 Java 库添加。
如果我用Android.mk文件构建应用程序,它构建得很好。如果我使用Android.bp文件构建应用程序,隐藏Android.mk,它不会构建并失败并出现错误:
忍者:错误:未知目标 'MODULES-IN-vendor-${vendor_name}-apps-${app_name}',你的意思是 'MODULES-IN-vendor-${vendor_name}-apps-${another_app_name}'?
或者它可以只是
忍者:错误:未知目标 'MODULES-IN-vendor-${vendor_name}-apps-${app_name}'
我的Android.bp样子:
android_app {
java_libs: ["some.hidl.lib-V1.0-java"],
java_static_libs: ["android.hidl.base-V1.0-java-static"],
srcs: ["**/*.java"],
android_resource_dirs: ["res/**"],
name: "MyApplication",
module_name: "MyApplication",
package_name: "me.myself.MyApplication", // also tried just the name as it is done in Android.mk
enabled: true,
proguard_enabled: disabled
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
查看 Android (AOSP) 的来源,installPackage标记为已弃用并检查 Android 的 PackageManager 应用程序,它使用PackageInstaller该类创建一个PackageInstaller.Session实例来执行 APK 的安装。
我正在尝试在我的应用程序中做同样的事情。我使用系统密钥签名,并且我确实INSTALL_PACKAGES在清单中包含了权限。
这是我的代码:
val packageName = "com.spotify.music"
val inputStream = File(filesDir, "spotify.apk").inputStream()
// ...
val packageInstaller = context.packageManager.packageInstaller
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
params.setAppPackageName(packageName)
val sessionId = packageInstaller.createSession(params)
val session = packageInstaller.openSession(sessionId)
val out = session.openWrite("COSU", 0, -1)
inputStream.copyTo(out)
session.fsync(out)
inputStream.close()
out.close()
session.commit(null)
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下奇怪的空指针异常:
Error while installing: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AppOpsManager.checkPackage(int, java.lang.String)' on a null object reference
有人知道这里出了什么问题吗?
android android-source silent-installer android-package-managers kotlin
在android中,与passthrough hidl相比,binderised hidl有什么优势?
据我所知,有两种 hidl 方式(绑定方式(单独进程中的客户端/服务器),直通方式(同一进程中的客户端/服务器)。与直通方式相比,绑定方式有什么优势?
我认为绑定方式比直通有更多的开销,因为绑定方式需要使用绑定器通信(RPC)。
为什么供应商使用绑定方式?
我正在尝试使用 AOSP 构建外部工具。我的操作系统是 Linux,发行版 ArchLinux (i3wm),但为了编译 AOSP,我在 Docker 中使用了 Ubuntu ( https://android.googlesource.com/platform/build/+/master/tools/docker )
第一步:
# init repo
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r36 --depth=1
repo sync
. build/envsetup.sh # set up environment
lunch aosp_arm-eng # select target to build
Run Code Online (Sandbox Code Playgroud)
第二步:选择工具并构建
cd external/selinux
mma -j48
Run Code Online (Sandbox Code Playgroud)
输出:
ninja: error: unknown target 'MODULES-IN-'
15:41:55 ninja failed with: exit status 1
make: *** [run_soong_ui] Error 1
make: Leaving directory `/home/user/aosp'
#### make failed to build some targets (6 seconds) ###
Run Code Online (Sandbox Code Playgroud)
另一个工具
cd external/wpa_supplicant_8
mma …Run Code Online (Sandbox Code Playgroud) 我从 AOSP 构建的 Android 模拟器有问题。
我的步骤是:
$ repo sync -j8
$ source build/envsetup.sh
$ lunch --> chose 22. aosp_x86_64-eng
$ make -j8
$ set_stuff_for_environment
$ emulator
Run Code Online (Sandbox Code Playgroud)
然后模拟器启动,但一直黑屏,很长一段时间没有响应。我还尝试了其他目标,例如 1. aosp_arm-eng
其他所有模拟器都启动(通过 AVD Manager 或 Android Studio)像往常一样工作。
我使用 macOS 10.14.6
我正在使用 aosp 并在运行命令后:
make 2>&1 | tee build-log.txt
Run Code Online (Sandbox Code Playgroud)
我收到很多错误,例如:
packages/apps/Settings/res/values/aliases.xml:19: error: Resource entry confirm_lock_pattern is already defined.
res/layout/confirm_lock_pattern.xml:0: Originally defined here.
packages/apps/Settings/res/values/aliases.xml:20: error: Resource entry confirm_lock_password is already defined.
res/layout/confirm_lock_password.xml:0: Originally defined here.
packages/apps/Settings/res/values/strings.xml:5193: error: Resource entry enable_verbose_log_vpu is already defined.
packages/apps/Settings/res/values/strings.xml:5189: Originally defined here.
Run Code Online (Sandbox Code Playgroud)
当我检查特定文件 aliases.xml 和 strings.xml 时,
别名.xml:
<item name="confirm_lock_pattern" type="layout">@layout/confirm_lock_pattern_base</item>
<item name="confirm_lock_password" type="layout">@layout/confirm_lock_password_base</item>
Run Code Online (Sandbox Code Playgroud)
字符串.xml:
获取 AOSP 源,是 134GB。
一个特定版本的 Android 的结账可能需要很多 GB。
定制 AOSP 的开发人员如何将他们的更改保持在(他们自己的)版本控制之下?(鉴于签入 Android 版本源的快照将是许多 GB。)
当我点击ctrl+class name打开一个类的源代码时,android studio 通常会打开一个带有存根方法的虚拟实现。当我降低compileSdkVersion到29这些动作正常工作时。
我Sources for Android 30在sdkmanager窗口找不到。
它会很快发布还是我错过了什么?