如何制作使用jni打开/dev/video*或其他系统文件的android系统应用程序?

如何制作使用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

我有一个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)
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