从CLI生成时,Cordova会向AndroidManifest.xml添加不需要的权限
我使用CLI构建我的Cordova应用程序,并添加了媒体插件 “cordova build”会自动将android.permission.RECORD_音频添加到我的AndroidManifest.xml中,即使我不使用该权限从CLI生成时,Cordova会向AndroidManifest.xml添加不需要的权限,android,cordova,permissions,command-line-interface,Android,Cordova,Permissions,Command Line Interface,我使用CLI构建我的Cordova应用程序,并添加了媒体插件 “cordova build”会自动将android.permission.RECORD_音频添加到我的AndroidManifest.xml中,即使我不使用该权限 那么我如何移除它呢?每次我构建发布时,权限都会添加到apk中。在您的项目中,编辑文件plugins/org.apache.cordova.media/plugin.xml 您将看到特定于android的配置 <platform name="android"&g
那么我如何移除它呢?每次我构建发布时,权限都会添加到apk中。在您的项目中,编辑文件plugins/org.apache.cordova.media/plugin.xml 您将看到特定于android的配置
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="Media" >
<param name="android-package" value="org.apache.cordova.media.AudioHandler"/>
</feature>
</config-file>
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</config-file>
...
...
像这样删除行
,不会在每次生成时添加权限
由于权限已添加到AndroidManifest.xml,您必须手动将其删除,然后在下次构建时它不应返回。要防止插件重新添加不必要的权限,请编辑platforms/android/android.json 找到这些管路并将其拆下:
{
"xml": "<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",
"count": 1
}
{
“xml”:“,
“计数”:1
}
请注意,这是一个“肮脏”的解决方案。在添加/更新插件后,您可能必须重复此操作。在尝试了几个建议后失败 转到platforms\android\cordova并运行
>clean
返回到项目目录并(在windows上)运行
打开results.txt以查看具有权限的文件
从列出的所有文件中删除了对权限的提及,AudioHandler.java文件除外
做了一个构建,它成功了。最后。我尝试了上面的建议(来自QuickFix和leuk98743),但清单文件不断被重新生成。 因此,我创建了一个钩子来在构建过程中修改清单文件
hooks/after\u prepare/030\u remove\u permissions.js
#/usr/bin/env节点
//
//此挂钩从AndroidManifest.xml中删除特定权限
//AndroidManifest在准备阶段重新生成,
//所以这必须在“after_prepare”钩子上运行。
//
//配置要强制删除的权限。
//注意:无论有多少插件,这些权限都将被删除
//需要许可。您可以检查仅需要的权限
//根据您认为*需要的插件,通过查看中显示的“计数”
//您的/plugins/android.json文件。
//如果计数大于1,则应通过
//的/plugins/plugin name/plugin.xml文件使用权限标记。
var permissionsToRemove=[“录制音频”、“修改音频设置”、“读取电话状态”];
var fs=需要('fs');
var path=require('path');
var rootdir=process.argv[2];
var manifestFile=path.join(rootdir,“platforms/android/AndroidManifest.xml”);
readFile(manifestFile,“utf8”,函数(err,data)
{
如果(错误)
返回console.log(err);
var结果=数据;
对于(var i=0;i我做了以下工作:
已从以下2个文件中删除权限项:
myapp\platforms\android\app\src\main\AndroidManifest.xml
myapp\platforms\android\android.json
在释放模式下重建apk
它起作用了,删除的权限条目无法在清单文件中返回。
已成功将apk上载到Play console。为那些更熟悉python的人克隆了的答案。它假定该文件将位于类似于hooks/after\u prepare/123\u remove\u permissions.py的位置,并且是可执行的
!/usr/bin/env python
导入操作系统
script_dir=os.path.dirname(os.path.abspath(_文件__))
project_dir=os.path.abspath(os.path.join(script_dir,“....”)
错误的\u权限=[
“写入外部存储”,
“录制音频”,
“修改音频设置”,
]
android_manifest=os.path.join(project_dir'platforms/android/app/src/main/AndroidManifest.xml')
打开(android_清单,'r')作为fr:
行=fr.readlines()
new_lines=[line for line in lines if not[perm for perm in bad_perm in line if perm in bad_perm perm]]
打开(android_清单,“w”)作为fw:
fw.writelines(新线)
媒体插件添加了录制音频权限:这是正确的。正如我在原始帖子中指出的:)您需要使用插件(或在本地修改插件)从plugin.xml(上面链接中的行)中删除权限并确保您不进行任何需要此权限的调用。如果您不想分叉,您可以本地下载插件/修补它并从本地路径安装,或者直接修补项目的/plugins文件夹的plugin文件夹中的plugin.xml文件。我也这么认为。但它仍然添加了四个权限。这不是流程:1.创建应用程序并添加Android平台2.添加媒体插件3.从AndroidManifest.xml中删除权限4.从plugins/org.apache.cordova.media/plugin.xml中删除权限5.构建6.AndroidManifest.xml现在再次包含权限。即使我从cli卸载媒体插件并从mani中删除权限fest,然后再次构建,权限被放回…我分叉了插件,从github上的plugin.xml中删除了权限,然后从那里安装。这就成功了。谢谢。我不知道这个文件还包含使用权限信息。我下次会尝试。最好的办法是分叉插件存储库,尽管没有g在我的plugins/android.json
中,但在platforms/android/android.json
(使用Ionic 2
)下找到了这样一个好主意,因为它是自动的。但是代码示例似乎已经损坏了!谢谢你让我知道。我已经修复了代码示例。谢谢这解决了我的问题:1)hooks directo
>findstr /s /M RECORD_AUDIO *.* > results.txt