由于某些 java-错误,buildozer 无法正常工作

buildozer not working due to some java-error

所以我尝试使用 buildozer 创建一个简单的应用程序,如本教程所述:

https://kivy.org/docs/guide/packaging-android.html

然而,buildozer 因某些 java 错误而失败,而且我对 java 完全没有任何线索。这是我从 buildozer 得到的输出:

# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Read available permissions from api-versions.xml
# Preparing build
# Check requirements for android
# Run 'dpkg --version'
# Cwd None
Debian 'dpkg' package management program version 1.18.10 (amd64).
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
# Search for Git (git)
#  -> found at /usr/bin/git
# Search for Cython (cython)
#  -> found at /usr/local/bin/cython
# Search for Java compiler (javac)
#  -> found at /usr/lib/jvm/java-9-openjdk-amd64/bin/javac
# Search for Java keytool (keytool)
#  -> found at /usr/lib/jvm/java-9-openjdk-amd64/bin/keytool
# Install platform
# Apache ANT found at /home/stephan/.buildozer/android/platform/apache-ant-1.9.4
# Android SDK found at /home/stephan/.buildozer/android/platform/android-sdk-20
# Android NDK found at /home/stephan/.buildozer/android/platform/android-ndk-r9c
# Run '/home/stephan/.buildozer/android/platform/android-sdk-20/tools/android list sdk -u -e'
# Cwd /home/stephan/.buildozer/android/platform
Refresh Sources:
  Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
        at javax.crypto.JceSecurityManager.<clinit>(java.base@9-Ubuntu/JceSecurityManager.java:65)
        at javax.crypto.Cipher.getConfiguredPermission(java.base@9-Ubuntu/Cipher.java:2595)
        at javax.crypto.Cipher.getMaxAllowedKeyLength(java.base@9-Ubuntu/Cipher.java:2619)
        at sun.security.ssl.CipherSuite$BulkCipher.isUnlimited(java.base@9-Ubuntu/CipherSuite.java:602)
        at sun.security.ssl.CipherSuite$BulkCipher.<init>(java.base@9-Ubuntu/CipherSuite.java:574)
        at sun.security.ssl.CipherSuite$BulkCipher.<clinit>(java.base@9-Ubuntu/CipherSuite.java:460)
        at sun.security.ssl.CipherSuite.<clinit>(java.base@9-Ubuntu/CipherSuite.java:1074)
        at sun.security.ssl.SSLContextImpl.getApplicableSupportedCipherSuiteList(java.base@9-Ubuntu/SSLContextImpl.java:353)
        at sun.security.ssl.SSLContextImpl.access0(java.base@9-Ubuntu/SSLContextImpl.java:41)
        at sun.security.ssl.SSLContextImpl$AbstractTLSContext.<clinit>(java.base@9-Ubuntu/SSLContextImpl.java:582)
        at java.lang.Class.forName0(java.base@9-Ubuntu/Native Method)
        at java.lang.Class.forName(java.base@9-Ubuntu/Class.java:291)
        at java.security.Provider$Service.getImplClass(java.base@9-Ubuntu/Provider.java:1844)
        at java.security.Provider$Service.newInstance(java.base@9-Ubuntu/Provider.java:1820)
        at sun.security.jca.GetInstance.getInstance(java.base@9-Ubuntu/GetInstance.java:236)
        at sun.security.jca.GetInstance.getInstance(java.base@9-Ubuntu/GetInstance.java:164)
        at javax.net.ssl.SSLContext.getInstance(java.base@9-Ubuntu/SSLContext.java:166)
        at org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:202)
        at org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:209)
        at org.apache.http.conn.ssl.SSLSocketFactory.<init>(SSLSocketFactory.java:333)
        at org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory(SSLSocketFactory.java:165)
        at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:45)
        at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:294)
        at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:445)
        at com.android.sdklib.internal.repository.UrlOpener.openWithHttpClient(UrlOpener.java:295)
        at com.android.sdklib.internal.repository.UrlOpener.openUrl(UrlOpener.java:155)
        at com.android.sdklib.internal.repository.DownloadCache.downloadAndCache(DownloadCache.java:572)
        at com.android.sdklib.internal.repository.DownloadCache.openCachedUrl(DownloadCache.java:496)
        at com.android.sdklib.internal.repository.AddonsListFetcher.fetchXmlUrl(AddonsListFetcher.java:267)
        at com.android.sdklib.internal.repository.AddonsListFetcher.fetch(AddonsListFetcher.java:132)
        at com.android.sdkuilib.internal.repository.sdkman2.PackageLoader.loadRemoteAddonsListInTask(PackageLoader.java:445)
        at com.android.sdkuilib.internal.repository.sdkman2.PackageLoader.access0(PackageLoader.java:50)
        at com.android.sdkuilib.internal.repository.sdkman2.PackageLoader.run(PackageLoader.java:415)
        at com.android.sdkuilib.internal.repository.SdkUpdaterNoWindow$ConsoleTaskFactory.start(SdkUpdaterNoWindow.java:176)
        at com.android.sdkuilib.internal.repository.sdkman2.PackageLoader.loadRemoteAddonsList(PackageLoader.java:412)
        at com.android.sdkuilib.internal.repository.UpdaterData.run(UpdaterData.java:1045)
        at com.android.sdkuilib.internal.repository.SdkUpdaterNoWindow$ConsoleTaskFactory.start(SdkUpdaterNoWindow.java:166)
        at com.android.sdkuilib.internal.repository.SdkUpdaterNoWindow$ConsoleTaskFactory.start(SdkUpdaterNoWindow.java:160)
        at com.android.sdkuilib.internal.repository.UpdaterData.refreshSources(UpdaterData.java:1041)
        at com.android.sdkuilib.internal.repository.UpdaterData.getRemoteArchives_NoGUI(UpdaterData.java:779)
        at com.android.sdkuilib.internal.repository.UpdaterData.listRemotePackages_NoGUI(UpdaterData.java:818)
        at com.android.sdkuilib.internal.repository.SdkUpdaterNoWindow.listRemotePackages(SdkUpdaterNoWindow.java:123)
        at com.android.sdkmanager.Main.displayRemoteSdkListNoUI(Main.java:391)
        at com.android.sdkmanager.Main.doAction(Main.java:253)
        at com.android.sdkmanager.Main.run(Main.java:118)
        at com.android.sdkmanager.Main.main(Main.java:101)
Caused by: java.lang.SecurityException: Can not initialize cryptographic mechanism
        at javax.crypto.JceSecurity.<clinit>(java.base@9-Ubuntu/JceSecurity.java:91)
        ... 46 more
Caused by: java.lang.NullPointerException
        at sun.nio.fs.UnixPath.normalizeAndCheck(java.base@9-Ubuntu/UnixPath.java:75)
        at sun.nio.fs.UnixPath.<init>(java.base@9-Ubuntu/UnixPath.java:69)
        at sun.nio.fs.UnixFileSystem.getPath(java.base@9-Ubuntu/UnixFileSystem.java:280)
        at java.nio.file.Paths.get(java.base@9-Ubuntu/Paths.java:84)
        at javax.crypto.JceSecurity.setupJurisdictionPolicies(java.base@9-Ubuntu/JceSecurity.java:254)
        at javax.crypto.JceSecurity.access[=11=]0(java.base@9-Ubuntu/JceSecurity.java:49)
        at javax.crypto.JceSecurity.run(java.base@9-Ubuntu/JceSecurity.java:82)
        at javax.crypto.JceSecurity.run(java.base@9-Ubuntu/JceSecurity.java:79)
        at java.security.AccessController.doPrivileged(java.base@9-Ubuntu/Native Method)
        at javax.crypto.JceSecurity.<clinit>(java.base@9-Ubuntu/JceSecurity.java:78)
        ... 46 more
# Command failed: /home/stephan/.buildozer/android/platform/android-sdk-20/tools/android list sdk -u -e
# 

我使用的是 Kubuntu 16.10,安装了 openjdk9,并尝试使用带和不带“--python3”的 buildozer,结果相同。

asgs 提供的解决方案运行良好。我安装了 OpenJDK8 而不是 9,这让 Buildozer 工作得很好。