Xamarin Android如何将.pem文件添加至APK主目录?
解决Xamarin Android中将.pem文件放置到APK主目录的问题
首先得明确你说的「APK主目录」具体指哪种场景:是APK压缩包本身的根目录(解压后能和AndroidManifest.xml、classes.dex同层级看到该文件),还是应用安装后设备上的应用私有主目录?我分两种情况给你可行的解决方案:
情况1:将.pem放到APK压缩包的根目录
如果第三方库要求.pem文件存在于APK包的根目录,你可以通过修改项目配置实现:
- 把你的
.pem文件放到项目根目录下(或者自定义子文件夹,比如项目根下的RootFiles文件夹)。 - 右键项目→选择「编辑项目文件」(.csproj文件),找到对应.pem文件的条目,修改构建配置:
<ItemGroup> <Content Include="myfile.pem"> <!-- 若文件在子目录,路径写成RootFiles/myfile.pem --> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <AndroidPackagePath></AndroidPackagePath> <!-- 空值表示打包到APK根目录 --> </Content> </ItemGroup>
保存后重新构建项目,打包出的APK根目录就会包含这个.pem文件了。
情况2:将.pem放到应用安装后的私有主目录
如果第三方库是在运行时读取设备上应用的私有主目录(比如/data/data/[你的包名]/),可以把Resources/raw里的文件复制到该目录:
- 在应用启动时(比如
MainActivity的OnCreate方法)执行复制操作:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.activity_main); // 获取应用私有主目录路径 var appMainDir = Application.Context.FilesDir.Parent; var targetPath = Path.Combine(appMainDir, "myfile.pem"); // 仅当目标文件不存在时执行复制,避免重复操作 if (!File.Exists(targetPath)) { using (var inputStream = Resources.OpenRawResource(Resource.Raw.myfile)) using (var outputStream = new FileStream(targetPath, FileMode.Create)) { inputStream.CopyTo(outputStream); } } }
应用首次启动时会自动把raw目录里的.pem复制到应用主目录,后续启动不会重复执行复制。这里无需额外申请权限,系统默认允许应用读写自身私有目录。
内容的提问来源于stack exchange,提问作者jmetran
相关产品推荐
相关产品推荐

