如何制作使用jni打开/dev/video*或其他系统文件的android系统应用程序?
我有一个android开发板NanoPi-M4,带有android 8.1 aosp源代码树。我正在尝试使用jni的v4l api(出于某种原因,不使用android camera api)制作一个可以访问usb摄像头的应用程序 PS:我不想使用如何制作使用jni打开/dev/video*或其他系统文件的android系统应用程序?,android,android-ndk,android-source,android.mk,Android,Android Ndk,Android Source,Android.mk,我有一个android开发板NanoPi-M4,带有android 8.1 aosp源代码树。我正在尝试使用jni的v4l api(出于某种原因,不使用android camera api)制作一个可以访问usb摄像头的应用程序 PS:我不想使用su方法或chmod命令更改文件权限,我只想让我的应用程序像aosp中的其他系统应用程序一样运行 我的应用程序已放入aosp源目录树。使用某些权限设置: 我的应用程序中的Android.mk: LOCAL_PATH := $(call my-dir) i
su
方法或chmod
命令更改文件权限,我只想让我的应用程序像aosp中的其他系统应用程序一样运行
我的应用程序已放入aosp源目录树。使用某些权限设置:
我的应用程序中的Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
$(call all-subdir-java-files)
LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := MyVideoTest
LOCAL_SDK_VERSION := current
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)
#jni
include $(CLEAR_VARS)
include $(call all-makefiles-under,$(LOCAL_PATH))
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.myvideo" coreApp="true" android:sharedUserId="android.uid.system"
>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<application android:label="MyVideoTest">
<activity android:name=".MainActivity" android:label="MyVideoTest">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
另外,修改frameworks/base/data/etc/platform.xml
文件,添加行:
运行应用程序后,我收到错误消息:权限被拒绝使用ps-A检查我的应用程序,它已经成为系统用户:
system 3261 411 4480832 105024 0 0 S com.test.myvideo
经过更多的搜索和研究,我发现以下信息: 1、本地\u特权\u模块使应用具有更大的功能,但在java运行时受到限制
2、系统!=root,系统uid不是root用户,因此不是最大功率用户。
3、/dev/video*具有linux权限0660,属于媒体用户,因此系统用户无法读取 然后,我在aosp:ueventd.rc中找到了一个文件,我在该文件中添加了以下行:
/dev/video0 0666 media camera
/dev/video1 0666 media camera
/dev/video2 0666 media camera
将0660更改为0666,然后,我的应用程序可以读取它
我们仍然欢迎更多的解决方案。因为我认为ueventd.rc破坏了android安全系统。请检查是否可以添加命令来更改设备的init.rc文件(例如:
device/linaro/hikey/init.common.rc)中的文件权限,就像在中一样。请检查是否可以添加命令来更改设备的init.rc文件中的文件权限(例如:device/linaro/hikey/init.common.rc
),就像在中完成一样。
/dev/video0 0666 media camera
/dev/video1 0666 media camera
/dev/video2 0666 media camera