用Rust开发的Android应用如何声明它所需要的权限?
我有一个使用 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。