Использование AWS Java SDK на Android для подписки IoT MQTT - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь выяснить, как использовать брокер mqtt в моем приложении для Android с AWS IoT Java SDK (https://github.com/aws/aws-iot-device-sdk-java). Я знаю, что существует Android SDK, но есть определенные проблемы, которые не являются частью этого вопрос. Итак, мой вопрос: возможно ли использовать фрагмент кода Java в Android? Есть ли способ указать путь к файлу сертификата и хранилище ключей как String

String clientEndpoint = "XXXX.amazonaws.com";
String clientId ="XXX-" + System.currentTimeMillis();  
String certificateFile = "/my/path/XXXX-certificate.pem.crt";
String privateKeyFile = "/my/path/XXXXX-private.pem.key";

SampleUtil.KeyStorePasswordPair pair = 
SampleUtil.getKeyStorePasswordPair(certificateFile, privateKeyFile);

AWSIotMqttClient mqttclient = new AWSIotMqttClient(clientEndpoint, clientId, 
pair.keyStore, pair.keyPassword);

mqttclient.connect();

Чтобы получить keystorePasswordPair, путь к файлу используется так же в классе SampleUtil:

final List<Certificate> certChain = loadCertificatesFromFile(certificateFile);

Метод loadCertificateFromFile создает файл с именем файла (certificateFile) в виде строки и, очевидно, файл не найден из-за неверного пути к файлу:

private static List<Certificate> loadCertificatesFromFile(final String filename) {
    File file = new File(filename);
    if (!file.exists()) {
        System.out.println("Certificate file: " + filename + " is not found.");
        return null;
    }

    try (BufferedInputStream stream = new BufferedInputStream(new FileInputStream(file))) {
        final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
        return (List<Certificate>) certFactory.generateCertificates(stream);
    } catch (IOException | CertificateException e) {
        System.out.println("Failed to load certificate file " + filename);
    }
    return null;
}

Есть ли способ заставить это работать, если я храню файлы в сыром виде, в активах или в любом другом месте?

...