用Rust开发的Android应用如何声明它所需要的权限?

人工智能 2026-07-12

我有一个使用 cargo apk build 为Android编译的Rust应用。我想让AndroidManifest.xml包含

<uses-permission
      android:name="com.oculus.feature.PASSTHROUGH"
      android:required="true"
      />

但我所有的尝试都失败了。

Stackoverflow的 AI建议使用

[package.metadata.android]
permissions = [
    "com.oculus.feature.PASSTHROUGH"
]

在我的Cargo.toml中,但这并不成功。我还尝试了

[[package.metadata.android.uses-permission]]
name = "com.oculus.feature.PASSTHROUGH"
required = "false"

[[package.metadata.android.uses-permission]]
"android:name" = "com.oculus.feature.PASSTHROUGH"
required = "false"

(最后一个是基于修改cargo-apk的源码以派生serde::Serialize,并输出修改后的清单以查看它的样子)

随cargo-apk附带的示例都没有显示如何声明权限。

显然在ndk-build的 AndroidManifest结构体中有一个

#[serde(rename(serialize = "uses-permission"))]
#[serde(default)]
pub uses_permission: Vec<Permission>,

字段。应该用什么正确的技术来填充它,以便我的应用能够访问我想要的功能?

解决方案

经过再多看一点,我发现 https://github.com/rust-mobile/cargo-apk/tree/main/cargo-apk#manifest,其中说我应该使用

[[package.metadata.android.uses_permission]]
name = "com.oculus.feature.PASSTHROUGH"
required = "false"

这个解决方案最令人担忧的部分是,它恰好是我在一开始的Cargo.toml中就有的内容。为什么在今天之前它没有让AndroidManifest.xml出现那些子句,仍然是个谜。

让用户在运行时批准权限本身就是一堆难题:How can a Rust application on Android request permissions like READ_EXTERNAL_STORAGE

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章