
Entrada
Olá pessoal. Há algum tempo, decidi fazer meu projeto para Android e iOS ao mesmo tempo. Naturalmente, surgiu a questão sobre a escolha da tecnologia. Algumas semanas, observei as pilhas populares e escolhi o Kotlin / Native. Como sou desenvolvedor do Android, conheço o Kotlin há muito tempo, mas não tinha muita experiência com o Swift e queria obter a maior parte do código comum às duas plataformas. Portanto, a questão surgiu imediatamente, mas como escrever uma interface do usuário para iOS. Uma rápida olhada no mercado sugeriu a existência do Flutter, que permite gravar a interface do usuário para duas plataformas simultaneamente. Na verdade, essa história começou.
Este artigo descreve a experiência de criação do Flutter como uma interface do usuário e o Kotlin para a lógica principal. 
Importante: sob o gato, há muitas fotos e instruções sobre como montar o projeto
Sumário
Parte 1
Criando uma biblioteca compartilhada no Kotlin
- Escolha a biblioteca compartilhada móvel do Kotlin
 
  
- Seguinte
 
  
- Especifique nossa pasta de trabalho, aqui eu criei uma pasta separada para o projeto. Como terei 4 projetos diferentes e é mais conveniente mantê-los em um só lugar
 
  
- Resta especificar o caminho para sdk.diremsdk.dire o projeto começa a ser construído. Eu tenho o caminho/Users/vlad/Library/Android/sdk
 
  
- Estrutura do projeto, altere os nomes dos pacotes de samplehabr.example
 
  
- É hora de começar a publicar, wrapperchamada. Depois disso, o.gradlew.gradlew aparecerá em nosso projeto e será possível trabalhar com ele no terminal
 
  
- Execute a partir do terminal ./gradlew publishToMavenLocal
 
  
- Depois disso, no repositório maven local, teremos 4 pastas nas quais nossas bibliotecas estarão
 
  
Parte 2
Criando um aplicativo Android
Crie um projeto android
- No momento da redação deste artigo, o projeto estava sendo gerado com uma dependência "quebrada"; portanto, nós o removemos no final do jre7, obtemos okoltin-stdlib, após o qual o projeto começa a ser construído.
 
  
- Abra build.gradlee adicionemavenLocalseção derepositories. Importante! A seção derepositoriesdeve ser aquela dentro de todos osallprojectse não nobuildScript
 
  
- Agora podemos adicionar nossa biblioteca como uma dependência
 implementation 'habr.example:commonLibrary-jvm:0.0.1'
 
  
- Abrimos activity_main.xmle especificamos no idmain_activity_textTextViewmain_activity_text
 
  
- Em MainActivity.ktbasta definir o texto nesteTextView
 
  
- Ótimo, neste momento, temos um aplicativo Android que pode usar a função hello()da nossa biblioteca
Parte 3
Crie um projeto iOS
- Escolhendo um aplicativo de exibição única
 
  
- Preencha as informações básicas e selecione a pasta. É importante escolher a raiz da pasta para nossos outros projetos, porque nele o Xcode criará uma subpasta com o nome do projeto.
 
  
 
  
- Primeiro, adicione CocoaPods. Para fazer isso, execute opod initna pasta do projeto, feche o projeto noXcodee execute apod install. Vemos que a instalação foi concluída com sucesso
 
  
- Importante! CocoaPodsnão recomenda adicionar a pasta/Podsao.gitignore, mas fiz assim mesmo. Como após adicionar oflutter, reconfiguraremos as dependências para cadabuild. Até agora, eu gosto mais desta solução do que entupir o.git
- Abra o projeto através do arquivo Awesome App.xcworkspace
 
  
- Abrimos o terminal, nele vamos para a pasta da nossa commonLibrarye executamos./gradlew linkDebugFrameworkIos. Depois disso, oiOSFrameworkaparece em nossa pasta debuildiOSFramework
 
  
- Escolha Alvo
 
  
- E para este Target, adicionamos o binário
 
  
- Escolha Adicionar outro
 
  
- Especifique o caminho para a frameworkque você recebeu na etapa 6 (commonLibrary.framework)
 
  
 
  
- Agora, no projeto, essa frameworkdeve ser exibida
 
  
- Vá para Build Settingse desativeEnable Bitcode
 
  
- Agora você precisa especificar exatamente onde procurar nossa framework, abra oFramework Search PathdaFramework Search Path
 
  
- Especifique o caminho "${PODS_ROOT}/../../commonLibrary". Certifique-se de escolherrecursive. Obviamente, você pode ficar sem isso, se configurar o caminho com mais precisão. Mas, como esse é apenas o começo do projeto, agora é importante garantir que todo esse grupo funcione. E podemos mudar o caminho e então
 
  
- Precisamos garantir que, a cada buildnoXcodenossaframeworkusandogradle.Build Phasesaberta
 
  
- Adicionar uma nova Script Phase
 
  
- Adicione o código do script.
 
  cd "${PODS_ROOT}/../../commonLibrary" echo $(pwd) ./gradlew linkIos
 
 Aqui, simplesmente vamos para a pasta do projeto da nossa biblioteca e executamos./gradlew linkIos. A chamadaecho $(pwd)é necessária apenas para mostrar no console qual pasta específica chegamos
 
  
- Empurramos nossa build phasepara o topo, logo apóstarget dependencies
 
  
- Agora abra o ViewControllere adicione uma chamada à nossa função da biblioteca
 
  
- Lançamos nosso projeto e vemos
 
  
Ótimo, isso significa que conectamos corretamente a Biblioteca Kotlin ao projeto iOS.
Tudo o que resta é adicionar vibração, como uma estrutura para escrever a interface do usuário, em nossos aplicativos e você pode começar a desenvolver o produto
Parte 4
Adicionando Flutter a um aplicativo Android
Então, um artigo no 
github me ajudou muito
- Vá para a pasta raiz onde todos os nossos projetos estão localizados e faça o flutter create -t module flutter_ui
 
  
 
- Abra settings.gradlee ative nosso módulo de vibração como um subprojeto
 
  
 
- Abra o arquivo build.gradle e adicione nosso projeto, dependendo
 
  
 
- MainActivity.ktpara- FlutterActivity
 
  
 
- Adicione App.kt, no qual inicializaremos oFlutterna inicialização do aplicativo
 
  
 
- Altere o manifesto e diga que agora temos uma classe para Application
 
  
 
- Certifique-se de adicionar java8, sem esse flutter não será iniciado
 
  
 
- Vemos a interface do usuário nos logs Olá da JVM , o que significa que reunimos a interface do usuário no Flutter e a biblioteca principal no Kotlin / Native
 
  
 
  
 
- Adicione um método ao MainActivity.ktque chamaremos de Flutter. Aqui, em um evento de Flutter, retornamos nossohello()da kotlin-library
 
  
 
- E adicione código ao main.dartque chamará o método na parteiOS/Android-aplicativo
 
  
 
- Nós temos
  
 
Parte 5
Adicionando Flutter ao aplicativo iOS
- Atualizando nosso Podfile
  flutter_application_path = File.expand_path("../flutter_ui", File.dirname(path)) eval(File.read( File.join( flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)
 
  
 
  
- É importante . Adicione $(inherited)à primeira linha dosframework search pathsdaframework search paths. Certifique-se de verificar seframework search pathsnãoframework search pathsvazios
 
  
 
 Quando você altera as dependências emsome/path/my_flutter/pubspec.yaml, é necessário executarflutter packages getemsome/path/my_flutterpara atualizar as dependências nopodhelper.rb. Depois disso, execute apod installdopod installpartir desome/path/MyApp
- Adicione mais 1 Build Phase, apenas para Flutter. Acima do que adicionamos na parte 3 daScript phase
 
  "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed
 
  
- AppDelegatenosso- AppDelegatepor- FlutterAppDelegate
 
  
- Atualizar ViewController
 
  
- Embrulhe nosso ViewControllerem umNavigatorController
 
    
- Agora o aplicativo inicia. Mas, por enquanto, não temos conexão entre a biblioteca e a vibração  
- Adicione este link usando FlutterMethodChannel
 
  
 
- Ótimo, agora o aplicativo iOS usa flutterparaUIekotlinpara a lógica principal.
 
  
 
Conclusão 
O que é importante dizer aqui: não finjo que você aprendeu algo novo ou único. Acabei de compartilhar minhas experiências, porque, para fazer tudo funcionar em conjunto, passei cerca de 4 dias úteis. E não consegui encontrar exemplos de código de projeto que use Kotlin / Native e Flutter
Projetos finais
- grupo de projeto
- flutter-ui
- ios
- andróide
- biblioteca comum
Lista de links que me ajudaram, mas não imediatamente
- Ele mesmo vibra
- A relação entre o código nativo e os canais da plataforma de flutuação da interface do usuário
- Adicionar flutter ao aplicativo github existente
- Visão geral nativa do Kotlin Native