Android 上的 Kivy,发生 JVM 异常:尝试在空对象引用上调用虚方法 ...
Kivy on Android, JVM exception occurred: Attempt to invoke virtual method ... on a null object reference
我们正在尝试访问我们正在构建的 Kivy 应用程序中的 Android 相机。我们首先选择使用 plyer
但我们收到 ClipData.Item.getUri()
错误。我们最终尝试遵循此处描述的详细信息:https://github.com/kivy/plyer/issues/500#issuecomment-565532048
现在获取文件的 URI 似乎有问题。
我们在 AndroidManifest.tmpl.xml
中添加了这个:
<manifest>
<application>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="org.our.appnamehere"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
</application>
</manifest>
file_paths.xml
中还有这个:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="Android/data/org.our.appnamehere/files/Pictures" />
</paths>
我们已经尝试将 android:authorities
行更改为 org.our.appnamehere.provider
和 org.our.appnamehere.fileprovider
以及将给定文件中的相应 getUriForFile
从 link以上
...
photo_file = self._create_image_file()
if photo_file is not None:
photo_uri = FileProvider.getUriForFile(
self.currentActivity.getApplicationContext(),
self.currentActivity.getApplicationContext().getPackageName(),
photo_file
)
...
变成 self.currentActivity.getApplicationContext().getPackageName() + '.provider'
或 self.currentActivity.getApplicationContext().getPackageName() + '.fileprovider'
。
该应用程序似乎成功创建了 photo_file
link 的文件,因为我们可以在 Android/data/org.our.appnamehere/files/Pictures
下访问它们。我们总是会收到以下错误,大概来自 photo_uri
行:
JavaException("JVM Exception occurred: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference")
我们所在的智能手机 运行 已编译的应用程序在 Android Pie,版本 9 上。
此错误的几乎所有解决方案看起来都与我们添加到清单和 file_paths.xml 中的解决方案相似。除了 android:authorities
的几种变体之外,我们还尝试了此 link 中的以下几行:https://github.com/jkwiecien/EasyImage/issues/103#issuecomment-304304045
<provider
...
tools:replace="android:authorities">
<meta-data
...
tools:replace="android:resource"/>
</provider>
它们并没有真正起作用,我们仍然无法访问相机。我们可能只是遗漏了一些明显的东西...
如有任何帮助,我们将不胜感激。非常感谢。
我们实际上只是遗漏了一些明显的东西。
运行
buildozer android clean
重建 .apk 就成功了。提示是 <provider>
标签不包含在 .apk 的清单中,尽管在模板中。
我们现在可以用相机拍照和保存文件了。
现在发生的情况是,应用程序似乎在捕获后无法自行恢复,但这完全是一个单独的问题。
我们正在尝试访问我们正在构建的 Kivy 应用程序中的 Android 相机。我们首先选择使用 plyer
但我们收到 ClipData.Item.getUri()
错误。我们最终尝试遵循此处描述的详细信息:https://github.com/kivy/plyer/issues/500#issuecomment-565532048
现在获取文件的 URI 似乎有问题。
我们在 AndroidManifest.tmpl.xml
中添加了这个:
<manifest>
<application>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="org.our.appnamehere"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
</application>
</manifest>
file_paths.xml
中还有这个:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="Android/data/org.our.appnamehere/files/Pictures" />
</paths>
我们已经尝试将 android:authorities
行更改为 org.our.appnamehere.provider
和 org.our.appnamehere.fileprovider
以及将给定文件中的相应 getUriForFile
从 link以上
...
photo_file = self._create_image_file()
if photo_file is not None:
photo_uri = FileProvider.getUriForFile(
self.currentActivity.getApplicationContext(),
self.currentActivity.getApplicationContext().getPackageName(),
photo_file
)
...
变成 self.currentActivity.getApplicationContext().getPackageName() + '.provider'
或 self.currentActivity.getApplicationContext().getPackageName() + '.fileprovider'
。
该应用程序似乎成功创建了 photo_file
link 的文件,因为我们可以在 Android/data/org.our.appnamehere/files/Pictures
下访问它们。我们总是会收到以下错误,大概来自 photo_uri
行:
JavaException("JVM Exception occurred: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference")
我们所在的智能手机 运行 已编译的应用程序在 Android Pie,版本 9 上。
此错误的几乎所有解决方案看起来都与我们添加到清单和 file_paths.xml 中的解决方案相似。除了 android:authorities
的几种变体之外,我们还尝试了此 link 中的以下几行:https://github.com/jkwiecien/EasyImage/issues/103#issuecomment-304304045
<provider
...
tools:replace="android:authorities">
<meta-data
...
tools:replace="android:resource"/>
</provider>
它们并没有真正起作用,我们仍然无法访问相机。我们可能只是遗漏了一些明显的东西...
如有任何帮助,我们将不胜感激。非常感谢。
我们实际上只是遗漏了一些明显的东西。
运行
buildozer android clean
重建 .apk 就成功了。提示是 <provider>
标签不包含在 .apk 的清单中,尽管在模板中。
我们现在可以用相机拍照和保存文件了。
现在发生的情况是,应用程序似乎在捕获后无法自行恢复,但这完全是一个单独的问题。