 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
junior103 Aprendiz

Registrado: Quarta-Feira, 1 de Julho de 2015 Mensagens: 204
|
Enviada: Qua Abr 17, 2019 10:35 am Assunto: [Resolvido] Como usar .Jar no delphi? |
|
|
Olá, fiz um jar utilizando o android studio e adicionei o mesmo na pasta Libraries no projeto delphi fmx para android.
Até ai tudo blza, o problema é que não sei como utilizar as funções que esta no jar.
Como fazer isso? Tem passo a passo?
Editado pela última vez por junior103 em Qui Jul 16, 2020 9:46 am, num total de 1 vez |
|
Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Abr 17, 2019 2:25 pm Assunto: |
|
|
Voce terá que gerar uma unit com interface que contenha as rotinhas do seu jar.
Esta unit normalmente é criada usando o java2op (recomendo mais pratico, porem não serve para todos os jars- gera um unico arquivo *.pas) ou o java2pas (bom tambem mais neste te gera uma infinidade de units *.pas, é que neste para cada classe que contenha o jar é criado uma unit dá muito trabalho depois organizar)
Tanto java2pas quanto java2op servem para criar as units com as infarfeces nescessaria para manusear as rotinhas do jar, contudo as units geradas precisa passar por revisão posterior e alguns ajustes são inevitaveis, isso pq os programadores java as vezes custuma usar palavras reservada do delphi em nome de variaveis, funções, procedimento e ou ate mesmo classes, ao passar isso para o delphi ja sabemos que o delphi vai acusar erro de sintaxe.
problemas com overloads tb é algo que ocorrem muito.
e caso de falso overloads tipo metodos update e UPDATE em java são dois metodos diferetene e com possibildade de fazer coisa diferente tambem, neste caso precisa renomear um deles de forma a diferenciar-lo agldo do tipo updade e updadeEx
uma pergunta te deixo, porquer criar um jar em android studio para depois usar em delphi?
algum recurso que só a atravez ide android studio possa usar?
poderia tentar rescrever as rotinas em delphi quando possivel.
Em vez de exportar arquivos *.jar poderia expostar arquivos *.so no android studio, pois a ultilização dos *.so é identica a o uso de dll no windows e isso dispensa criar units de interfaces. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
 |
junior103 Aprendiz

Registrado: Quarta-Feira, 1 de Julho de 2015 Mensagens: 204
|
Enviada: Qua Abr 17, 2019 2:55 pm Assunto: |
|
|
strak2012 escreveu: | Voce terá que gerar uma unit com interface que contenha as rotinhas do seu jar.
Esta unit normalmente é criada usando o java2op (recomendo mais pratico, porem não serve para todos os jars- gera um unico arquivo *.pas) ou o java2pas (bom tambem mais neste te gera uma infinidade de units *.pas, é que neste para cada classe que contenha o jar é criado uma unit dá muito trabalho depois organizar)
Tanto java2pas quanto java2op servem para criar as units com as infarfeces nescessaria para manusear as rotinhas do jar, contudo as units geradas precisa passar por revisão posterior e alguns ajustes são inevitaveis, isso pq os programadores java as vezes custuma usar palavras reservada do delphi em nome de variaveis, funções, procedimento e ou ate mesmo classes, ao passar isso para o delphi ja sabemos que o delphi vai acusar erro de sintaxe.
problemas com overloads tb é algo que ocorrem muito.
e caso de falso overloads tipo metodos update e UPDATE em java são dois metodos diferetene e com possibildade de fazer coisa diferente tambem, neste caso precisa renomear um deles de forma a diferenciar-lo agldo do tipo updade e updadeEx
uma pergunta te deixo, porquer criar um jar em android studio para depois usar em delphi?
algum recurso que só a atravez ide android studio possa usar?
poderia tentar rescrever as rotinas em delphi quando possivel.
Em vez de exportar arquivos *.jar poderia expostar arquivos *.so no android studio, pois a utilização dos *.so é identica a o uso de dll no windows e isso dispensa criar units de interfaces. |
Obrigado pela ajuda.
Então estou com uma documentação de dispositivo que até o momento só da para ser usado em android studio. No android studio na gradle eu adiciona essa dependência e ai tenho acesso as funções.
Então pensei em criar uma ponte de classe em java para ter acesso a esses métodos e por fim gerar o .jar.
Está correto trabalhar dessa forma? |
|
Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Abr 17, 2019 3:23 pm Assunto: |
|
|
Está correto trabalhar dessa forma?
Não de todo, podes conseguir desta forma tb mais teu jar pode não ser suficiente.
falaste que precisa trabalhar com um dispositivo que até o momento só se pode trabalhar com ele em android studio, pergunto onde estava escrito isso kkkkk, brincadeira.
voce pode trabalhar com qualquer dispositivo no delphi desde que tenha a sdk para trabalhar com tal dispositivo.
por vez a sdk não vem em *.jar e ai o que fazer?
quando o sdk não vem em *.jar certamente vem em *.aar, que na verdade nada mais é que um arquivo comprimido.
então como trabalhar com as sdk *.aar, no delphi. a resposta estar em abrir este *.aar com o winrar, e extrair seu conteudo para um pasta qualquer.
no conteudo extraido vai encontrar um arquivo chamado class.jar, olha só quem nos aparece. este class.jar é o sdk em si sem os resource claro.
a ideia de colocar sdk em aar é a possibilidade de enviar junto ao sdk as rource junto nescessaria tipo *.xml, *.png, *.so dentre outro.
vai ter que usar o java2op neste class.jar e criar a unit de interface.
quanto as resources do aar vai ter que ir introduzindo no deployment manualmente um a um.
é isso.
no momento estou a trabalhar com o dispositivo gpos700 que nada mais é que um pdv movel e sua sdk vem em *.aar e não em *.jar. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Abr 17, 2019 3:34 pm Assunto: |
|
|
Pode me add no skype para mais algumas duvidas.
skype: strak2005 _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
 |
junior103 Aprendiz

Registrado: Quarta-Feira, 1 de Julho de 2015 Mensagens: 204
|
Enviada: Qua Abr 17, 2019 5:43 pm Assunto: |
|
|
strak2012 escreveu: | Está correto trabalhar dessa forma?
Não de todo, podes conseguir desta forma tb mais teu jar pode não ser suficiente.
falaste que precisa trabalhar com um dispositivo que até o momento só se pode trabalhar com ele em android studio, pergunto onde estava escrito isso kkkkk, brincadeira.
voce pode trabalhar com qualquer dispositivo no delphi desde que tenha a sdk para trabalhar com tal dispositivo.
por vez a sdk não vem em *.jar e ai o que fazer?
quando o sdk não vem em *.jar certamente vem em *.aar, que na verdade nada mais é que um arquivo comprimido.
então como trabalhar com as sdk *.aar, no delphi. a resposta estar em abrir este *.aar com o winrar, e extrair seu conteudo para um pasta qualquer.
no conteudo extraido vai encontrar um arquivo chamado class.jar, olha só quem nos aparece. este class.jar é o sdk em si sem os resource claro.
a ideia de colocar sdk em aar é a possibilidade de enviar junto ao sdk as rource junto nescessaria tipo *.xml, *.png, *.so dentre outro.
vai ter que usar o java2op neste class.jar e criar a unit de interface.
quanto as resources do aar vai ter que ir introduzindo no deployment manualmente um a um.
é isso.
no momento estou a trabalhar com o dispositivo gpos700 que nada mais é que um pdv movel e sua sdk vem em *.aar e não em *.jar. |
Muito obrigado. |
|
Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Abr 17, 2019 6:18 pm Assunto: |
|
|
Só exclarecendo minha resposta
Não de todo, podes conseguir desta forma tb mais teu jar pode não ser suficiente.
A ideia é nunca ter que recorrer a programação java, mais em algunas casos é inevitavel.
A pergunta é quando usar e quando não usar programação java.
O java2op nem sempre consegue gerar a units com as interfaces isso por enumera situações, dentre delas a mais comum é quando o jar possui classes enum é um dos problema que o java2op não consegue resolver e por sua vez não gera a units com a interfaces, ja o java2pas não tem este problema.
vamos partir do ponto que vamos usar o java2op e temos o problema de não conseguir gerar o pas da interface
neste caso criar um outro jar já seria solução.
Ficando assim:
sdk jar <-> sua jar com export as rotinas que nescessita <-> unit com a interface de seu jar <->sua aplicação
Neste caso o java2op é aplicado em seu jar e não no sdk jar uma vez que o sdk jar apresenta incompatibilidade com o java2op.
No seu projeto vai precisar inserir os dois jar (o que criou para fazer a ponte com a sdk jar e o sdk jar). _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
 |
junior103 Aprendiz

Registrado: Quarta-Feira, 1 de Julho de 2015 Mensagens: 204
|
Enviada: Seg Abr 29, 2019 9:18 am Assunto: |
|
|
strak2012 escreveu: | Só exclarecendo minha resposta
Não de todo, podes conseguir desta forma tb mais teu jar pode não ser suficiente.
A ideia é nunca ter que recorrer a programação java, mais em algunas casos é inevitavel.
A pergunta é quando usar e quando não usar programação java.
O java2op nem sempre consegue gerar a units com as interfaces isso por enumera situações, dentre delas a mais comum é quando o jar possui classes enum é um dos problema que o java2op não consegue resolver e por sua vez não gera a units com a interfaces, ja o java2pas não tem este problema.
vamos partir do ponto que vamos usar o java2op e temos o problema de não conseguir gerar o pas da interface
neste caso criar um outro jar já seria solução.
Ficando assim:
sdk jar <-> sua jar com export as rotinas que nescessita <-> unit com a interface de seu jar <->sua aplicação
Neste caso o java2op é aplicado em seu jar e não no sdk jar uma vez que o sdk jar apresenta incompatibilidade com o java2op.
No seu projeto vai precisar inserir os dois jar (o que criou para fazer a ponte com a sdk jar e o sdk jar). |
Obrigado pelo esclarecimento. Para fins de aprendizagens, eu gerei um jar e fiz o JNI, funcionou perfeitamente.
Tem um dispositivo com S.O Android em que estou tentando criar uma app que usa o recursos de sua SDK. Usando o Android Studio está tranquilo de fazer isso, mas tentei fazer em fmx e estou tendo problemas para conseguir usar as funções da sdk do fabricante.
Exemplo:
No android studio tem gradle e lá informa a dependência necessária para poder ter acesso as funções da sdk.
No fmx eu tentei reproduzir baixando o arquivo ".aar" do fabricante no repositório no site da maven, e depois de ter baixado descompactei e copiei o arquivo "class.jar" para meu projeto android no firemonkey. Fiz o mesmo procedimento para ter acesso aos métodos mas esta dando uma exceção quando executo qualquer função: java.lang.NoClassDefFoundError:Failed resolution of: Lcielo/orders/domain/Credentials;.
O meu exemplo que eu fiz onde eu mesmo fiz o jar funcionou.
O que pode ser?
Desde já agradeço. |
|
Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Abr 29, 2019 10:04 am Assunto: |
|
|
Foste longe em buscar o aar do fabricante no repositório no site da maven.
Você tem o exemplo no android studio em que o gradle ja te faz esta parte de baixar as dependência no momento em que voce vai compilar seu projeto.
voce até consegue compilar o exemplo e testar no dispositivo - ok
Sem precisar ir no site de maven com o apk exemplo compilado e em mão voce consegue sacar a sdk *.jar do apk, assim como todos os demias arquivos nescessario :P
Esta é a grande jogada a ser feita aqui.
com o apk compilado e testado claro voce vai abrir o apk com winrar e extrair todo seu conteudo para um pasta
dentre os arquivos extraido vai ter varios class.dex
É estes class.dex que vamos sacar a sdk
postei um ultilitario de decompilação de aplicativo android, onde um deles é converter *.dex em *.jar
link da postagem:
http://activedelphi.com.br/forum/viewtopic.php?t=88218
vais pegar todos os *.dex da pasta e gerar *.jar com o ultilitario chamado d2j-dex2jar.bat
em seguida vai juntar todos os *.jar em um só
link de como juntar varios *.jar em um só:
http://activedelphi.com.br/forum/viewtopic.php?t=88626&highlight=android+sdk&sid=14d6cd61bf4b00453a9d60f3015fb782
basicamente só precisa para esta ação fazer uso de um utilitario do android sdk de nome dx.bat
este jar gerado na verdade é todos os class.dex incluido o sdk e suas dependencias como ate mesmo o programa exemplo.
Outra grande jogada aqui é que com este novo e unico jar em mão e com o winrar voce pode agora deletar apenas a parte que não te interessa deixando apenas o que é nescessario ou seja a sdk e suas dependencias e eliminando classes que seria apenas do exemplo.
deletar usando o winrar, desta vez não extrair o conteudo apenas com jar aberto no winrar voce vai deletando as classes do programa exemplo.
feito tudo isso voce tem uma jar que possui a sdk e suas dependencias
usando o java2op voce gera o INI e pronto ja pode incorpotar este jar em seu projeto delphi juntamente com o INI.
inicialmente voce fez a extração do apk em uma pasta e nesta pasta existe uma extrutura de pastas e arquivos
é importante que neste pontos se a sdk depende de algum arquivo do tipo *.xml, *.png, *.so que tb incorpore tais arquivo em seu projeto delphi atravez do deployment
pronto tens agora o projeto que possui um jar com a sdk e suas dependencia, juntamente com o INI e os arquivos restante em seu projeto Delphi.
obviamente que se tem a sdk em *.aar em mão não passa por tantas operações, contudo mesmo a sdk estando em *aar ela pode possuir outras dependencias de outros pacotes, por isso opto em sacar a sdk de uma proketo apk ja funcional.
sinta avontade em me add no skype para mais informação
skype: strak2005.
abraços. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
 |
junior103 Aprendiz

Registrado: Quarta-Feira, 1 de Julho de 2015 Mensagens: 204
|
Enviada: Qui Mai 02, 2019 10:28 am Assunto: |
|
|
strak2012 escreveu: | Foste longe em buscar o aar do fabricante no repositório no site da maven.
Você tem o exemplo no android studio em que o gradle ja te faz esta parte de baixar as dependência no momento em que voce vai compilar seu projeto.
voce até consegue compilar o exemplo e testar no dispositivo - ok
Sem precisar ir no site de maven com o apk exemplo compilado e em mão voce consegue sacar a sdk *.jar do apk, assim como todos os demias arquivos nescessario
Esta é a grande jogada a ser feita aqui.
com o apk compilado e testado claro voce vai abrir o apk com winrar e extrair todo seu conteudo para um pasta
dentre os arquivos extraido vai ter varios class.dex
É estes class.dex que vamos sacar a sdk
postei um ultilitario de decompilação de aplicativo android, onde um deles é converter *.dex em *.jar
link da postagem:
http://activedelphi.com.br/forum/viewtopic.php?t=88218
vais pegar todos os *.dex da pasta e gerar *.jar com o ultilitario chamado d2j-dex2jar.bat
em seguida vai juntar todos os *.jar em um só
link de como juntar varios *.jar em um só:
http://activedelphi.com.br/forum/viewtopic.php?t=88626&highlight=android+sdk&sid=14d6cd61bf4b00453a9d60f3015fb782
basicamente só precisa para esta ação fazer uso de um utilitario do android sdk de nome dx.bat
este jar gerado na verdade é todos os class.dex incluido o sdk e suas dependencias como ate mesmo o programa exemplo.
Outra grande jogada aqui é que com este novo e unico jar em mão e com o winrar voce pode agora deletar apenas a parte que não te interessa deixando apenas o que é nescessario ou seja a sdk e suas dependencias e eliminando classes que seria apenas do exemplo.
deletar usando o winrar, desta vez não extrair o conteudo apenas com jar aberto no winrar voce vai deletando as classes do programa exemplo.
feito tudo isso voce tem uma jar que possui a sdk e suas dependencias
usando o java2op voce gera o INI e pronto ja pode incorpotar este jar em seu projeto delphi juntamente com o INI.
inicialmente voce fez a extração do apk em uma pasta e nesta pasta existe uma extrutura de pastas e arquivos
é importante que neste pontos se a sdk depende de algum arquivo do tipo *.xml, *.png, *.so que tb incorpore tais arquivo em seu projeto delphi atravez do deployment
pronto tens agora o projeto que possui um jar com a sdk e suas dependencia, juntamente com o INI e os arquivos restante em seu projeto Delphi.
obviamente que se tem a sdk em *.aar em mão não passa por tantas operações, contudo mesmo a sdk estando em *aar ela pode possuir outras dependencias de outros pacotes, por isso opto em sacar a sdk de uma proketo apk ja funcional.
sinta avontade em me add no skype para mais informação
skype: strak2005.
abraços. |
Olá, tenho em mãos o dispositivo da cielo que tem o s.o Android, e nele terei que desenvolver um app que usa os recursos do mesmo. Pelo android studio está tranquilo o desenvolvimento pois é só informar no gradle as dependências e com isso tenho acesso as classes e métodos do fabricante, mas quero fazer isso com Delphi FMX, a questão é o seguinte: Não seria apenas usar JNI para fazer as chamadas dos métodos sem necessariamente baixar ou adicionar ".jar" no projeto, tipo por exemplo quando quero usar o toast que é nativo do android não precisei baixar nada, apenas usei JNI e funcionou, não seria a mesma coisa pois o SDK já vem instalado no dispositivo que é uma maquina de cartão com s.o Android? |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|