Как запустить Apache-Mina SSHD-сервер (2.2.0) на Android Pie? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь запустить сервер Apache MINA SSHD (v. 2.2.0) на устройстве Android Pie (API 28.0). Я нашел различные посты о том, что он работает на устройствах Android 4, но ни одно из них не работает на моем устройстве Android 9. Поэтому я попытался реализовать это сам, но застрял при инициализации сервера с ReflectionException / NoClassDefFoundError.

Когда я пытаюсь настроить сервер с помощью SshServer.setUpDefaultServer (); Я получаю это исключение:

java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/management/ReflectionException;
        at org.apache.sshd.common.util.GenericUtils.peelException(GenericUtils.java:730)
        at org.apache.sshd.common.util.GenericUtils.peelException(GenericUtils.java:728)
        at org.apache.sshd.common.util.security.SecurityEntityFactory$2.getInstance(SecurityEntityFactory.java:134)
        at org.apache.sshd.common.util.security.SecurityUtils.getMessageDigest(SecurityUtils.java:726)
        at org.apache.sshd.common.digest.DigestUtils.checkSupported(DigestUtils.java:53)
        at org.apache.sshd.common.digest.BuiltinDigests.<init>(BuiltinDigests.java:61)
        at org.apache.sshd.common.digest.BuiltinDigests.<clinit>(BuiltinDigests.java:36)
        at org.apache.sshd.common.cipher.ECCurves.<clinit>(ECCurves.java:61)
        at org.apache.sshd.common.keyprovider.KeyPairProvider.<clinit>(KeyPairProvider.java:63)
        at org.apache.sshd.common.signature.BuiltinSignatures.<clinit>(BuiltinSignatures.java:62)
        at org.apache.sshd.common.BaseBuilder.<clinit>(BaseBuilder.java:133)
        at org.apache.sshd.server.ServerBuilder.builder(ServerBuilder.java:165)
        at org.apache.sshd.server.SshServer.setUpDefaultServer(SshServer.java:429)
        at ch.zhaw.init.sshshell.SshShellService.<init>(SshShellService.java:20)

Из некоторых старых постов для Android 4 кажется, что это была известная проблема, и было решение добавить $ useLibrary org.apache.http.legacy в gradle и добавить в manifest.xml. Я сделал это, но исключение все еще происходит.

файл build.gradle:

android {
    compileSdkVersion 28
    useLibrary 'org.apache.http.legacy'
    ...
}
dependencies {
    ...
    implementation 'org.apache.sshd:sshd-core:2.2.0'
    implementation 'org.slf4j:slf4j-simple:1.6.2'
    implementation 'org.apache.mina:mina-core:2.1.2'
    implementation "org.bouncycastle:bcprov-jdk16:1.46"
}

manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="ch.zhaw.init.sshshell">
    <application
            android:networkSecurityConfig="@xml/network_security_config">
        <uses-library android:name="org.apache.http.legacy"
                      android:required="false" />
        <service android:name=".SshShellService">
            <intent-filter>
                <action android:name="StartSshServer"/>
            </intent-filter>
        </service>
    </application>
</manifest>

Мой Java-код:

import org.apache.sshd.server.SshServer;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;


private static final int PORT = 8022;
private final SshServer sshd = SshServer.setUpDefaultServer(); // Here I get the error
private final SimplePasswordAuthenticator passwordAuth = new SimplePasswordAuthenticator();
private final SimplePublicKeyAuthenticator publicKeyAuth = new SimplePublicKeyAuthenticator();
private final SimpleForwardingFilter forwardingFilter = new SimpleForwardingFilter();

Кажется, что старые версии работали, но я искал несколько дней и не нашел ни одного рабочего примера для новой версии. У кого-нибудь есть рабочий пример, который запускает последнюю версию Apache Mina SSHD (2.2.0) на Android 9 (без рутирования устройства)?

или, если нет, есть ли альтернативный SSH-сервер (не клиент - их много) для Android Pie?

Спасибо за любую помощь.

...