Usando o Android TrustStore para o aSmack no Android 4+ (ICS)

Eu não sou um especialista em keystores e tenho dificuldade em entender as nuances disso, mas isso é o quão longe eu cheguei:

Na criação de uma conexão xmpp usando a compilação asmack encontradaAqui um ainda tem que mudar o armazenamento de confiança, que geralmente, assim que diz o múltiplofontes na web, é feito usando esses comandos

ConnectionConfiguration config = new ConnectionConfiguration(host, Integer.parseInt(port), service);
config.setTruststorePath("/system/etc/security/cacerts.bks");
config.setTruststorePassword("changeit");
config.setTruststoreType("bks");
XMPPConnection connection = new XMPPConnection(connConfig);
connection.connect();

Isso funciona para versões mais antigas do Android, mas no ICS eles mudaram algumas coisas e agora não funciona mais. O caminho agora é diferente.

Pelo vistoisso pode ser consertado mas não tenho idéia do que fazer.

O que é necessário, obviamente, é um método que retorna o caminho, dependendo da versão do SDK que retorna a string necessária para definir o caminho sdk, já que você não pode simplesmente retornar o keystore para a conexão xmpp.

Em referência aisto esse método ficaria assim:

private String getTrustStorePath() 
{
 String path = System.getProperty("javax.net.ssl.trustStore");

 if (path == null) 
 {
  if ( Build.VERSION.SDK_INT >= 14 ) 
  {
   //THIS IS THE PART I DONT KNOW
   path="";
  }
  else
  {
   path = "/system/etc/security/cacerts.bks";
  }

  return path;
}

Aqui um comentarista diz que sob o Android "4.x; /etc/security/cacerts.bks foi substituído pelo diretório / etc / security / cacerts / contendo os certificados como arquivos codificados PEM individuais." no entanto, não sei qual relevância, se houver, isso tem.

Eu também verifiquei o código de dois projetos usando xmpp e asmack (gtalksms eyaxim mas não viu como eles evitam esse problema.

questionAnswers(2)

yourAnswerToTheQuestion