Unity 5.6+ and 2017.1.1f1+ Build Problemas (Android): AAPT failed or Android SDK paths problems (JDK Included)

Standard

Hello Guys, chegou a hora de dar algumas dicas de como sanar esse problema chato que está rolando na Unity nos últimos tempos. Deixo claro que vou postar alguns links para salvação do clan, ok? Então vamos lá:

1 – Problemas com SDK da Google na Unity 5.6+ ou 2017+ (JDK mais novo também apresenta problemas)

Recentemente tentei subir minha engine para as versões mais recentes e na hora de buildar para a Google tive diversos problemas. Visando deixar claro cada problema e solução resolvi dissecar através de links por problemas para que você fique bastante em paz na hora de compilar o bicho. No caso de SDK temos diversos problemas que vão desde a Google Tools que não está 100% compatível com a Unity, isto foi oficialmente divulgado, como no link abaixo:

https://unity3d.com/pt/unity/whats-new/unity-5.6.1#section-fixes

A solução que a Unity manda utilizar-se é uma bem conhecida (eu fiz um how to recente sobre: http://www.littleoak.com.br/2018/01/03/how-to-install-support-to-android-sdk-unity-2017-java-development-kit-jdk-dica-simples-e-funcional-jdk-1-9-problems/)

No mesmo link acima eu ensino como lidar com o JDK mais recente (1.9) que também apresenta alguma incompatibilidade misteriosa com a Google.
Outro link bom (e bem WINDOWS no assunto) trata do mesmo assunto, pode ser visto em:

http://devlog.markhlavac.com/2017/06/30/installing-android-sdk-for-unity3d-using-sdk-tools-and-cli/

Isso sana erros como

unable to list target platform

Acima matamos o problema de SDK da Google (e JDK da Oracle).

2 – Problemas na Hora de Buildar para Android

A mensagem mais comum e genérica que você pode receber na hora de buildar para android é:

Unity build problem – AAPT failed ALGUMACOISA ALGUMA COISA ALGUMA COISA

OUUUU

“There is a problem parsing the package”

 

Bom, existem vários caminhos que podem apresentar este problema (VÁRIOS MESMO), mas normalmente a solução que vou deixar vale para quase todos (senão todos) MESMO. Parse é o que mais recebe correção no tweak abaixo, no caso do AAPT pode ser o JDK cagado, nesse caso siga o passo que já falei no link -> http://www.littleoak.com.br/2018/01/03/how-to-install-support-to-android-sdk-unity-2017-java-development-kit-jdk-dica-simples-e-funcional-jdk-1-9-problems/

Na tela de Build Settings precisamos clicar em player settings que fica lá embaixo na tela:


Clicando em PLAYER SETTINGS temos de ajustar várias coisas, não vou entrar nos detalhes, mas há 1 ponto que deve ser BASTANTE observado, OTHER SETTINGS, nele temos o “range” de qual Android mínimo deve rodar o game e qual a API para qual o android foi projetado, se você colocar um range aceitável vai dar certo. Se o mínimo for alto seu Android não vai rodar, se a API for alta demais provavelmente sua Unity não vai compilar corretamente, então fiz assim:


No MINIMUM API LEVEL coloquei o 4.1 e no TARGET deixei o 7.1 (que é level 25, a que temos garantido na TOOLS e NO SDK DA GOOGLE 🙂

Abração guys, vamos que vamos.

How to Install Support to Android SDK (UNITY 2017+) & Java Development Kit (JDK) – Dica simples e funcional (JDK 1.9 problems)

Standard

Bom, serei o mais objetivo possível, ok?

Meu setup será descrito logo abaixo e o tweak para resolver também.

My Desk:

Mac OSX HighSierra 10.13.2,
8 GB ram,
Core2duo,
SSD 120gb Vertex 3 OCZ,
Unity 2017.1.1f1 personal 64bt.

Passo 1 (step 1):

Baixe o Android Studio (sim, o sdk vem nele, essa conversa de gamb de SDK não existe, precisa baixar e o bicho é grande, 700mb+, baixe aqui:

https://developer.android.com/studio/index.html

Depois de baixar e instalar (instalei default) você deve abrir ele e dizer que não tem instalação anterior, apenas um novo WORKSTATION. (nova instalação, sem importação de NADA).

Passo 2 (step 2):

No mesmo link de download do studio existe uma parte de ferramentas de CLI, você deve baixar a CLI do seu SO (pode ser windows, não tem problema, se seguir a lógica desse artigo você vai conseguir fazer rodar em seu windows numa boa):

Baixe em https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip a versão que eu usei.

EXTRAIA o arquivo que vai gerar uma pasta chamada tools. Pegue esta pasta, copie-a, entre na pasta /Users/SEU_USUARIO/Library/Android/sdk, DELETE OU renomeie a pasta tools que existia e coloque a pasta tools nova (a que você baixou e extraiu do google).

Feito isto temos o básico do Android SDK, mas precisamos arrumar o java (e esse é pegadinha do malandro viu?).

Antes de passarmos para o java precisamos entrar na pasta

/Users/little_oak/Library/Android/sdk/tools/bin pelo terminal, sim, abra o TERMINAL DO MAC (shell) e vamos ter que digitar comandos, lets go?

cd /Users/little_oak/Library/Android/sdk/tools/bin

./sdkmanager “platform-tools

./sdkmanager “platforms;android-25”

./sdkmanager “build-tools;25.0.3”

Entenda que ali é ./ MESMO, estamos mandando rodar o binário que não faz parte de um path global do sistema (para poder rodar comandos se estar no caminho completo dele).

 

Passo 3 (step 3):

Resolvido o problema do SDK da GOOGLE, agora precisamos resolver o sdk da Oracle. De alguma maneira estranha a Unity em suas versões anteriores apresentava uma inconsistência com a TOOLS da google mais recente (isso está descrito no link abaixo):

https://unity3d.com/pt/unity/whats-new/unity-5.6.1#section-fixes

A Unity 2017+ por sua vez já suporta a tools nova, porém apresenta alguma inconsistência pra lá de estranha com o JDK mais recente, o que me fez usar um JDK mais velho. Para dar certo usei o JDK jdk1.8.0_151.jdk (pode baixar aqui: http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-macosx-x64.dmg).

Assim que baixar instale normalmente. Terminada a instalação teremos alguns problemas para sanar, descrevo nos passos abaixo.

Passo 4 (step 4):

No OSX, o sistema bloqueia por padrão a leitura da pasta Library do usuário, sendo necessário dar permissões a esta pasta. Como segurança não é o quesito principal deste postei achei por bem mandar um 777 nela, logo precisamos rodar o comando abaixo:

sudo chmod 777 /Users/MEU_USUARIO/Library/

Feito isto agora podemos brincar na Unity.

Abra a Unity 2017+ e vá em UNITY -> PREFERENCES (imagem abaixo):
External TOOLS -> PROCURA PELA PARTE DE SDK E JDK.

EM SDK coloque: /Users/little_oak/Library/Android/sdk
EM JDK coloque: /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

No Windows os paths mudam, mas é bem mais fácil que no MAC.

Depois é só compilar :).

 

Unity 5+ Cuidado ao Comparar Pontos Flutuantes :(

Standard

Spoilers: comparar 2 pontos flutuantes diretamente com ==, >, <, etc. não é legal!

Por questões de hardware, o computador sempre carrega algum erro em operações de ponto flutuante (que é mais notado quanto mais vc vai fazendo operações em cima do valor de ponto flutuante). Isso é chamado de erro de mantissa, que vocês podem procurar mais em livros de calculo numérico, ou em links como esse:
http://producao.virtual.ufpb.br/…/livro.chunked/ch03s07.html

Por isso é uma boa prática de programação quando comparar valores de ponto flutuante usar um patamar de erro (ou threshold) que a gente chama normalmente de epsilon. Esse valor vai ser a precisão que você quer na operação, e vai variar de acordo com a necessidade do seu código. Por isso que eu e mais alguns sugerimos usar:
|A-B| > epsilon, ou A-B > epsilon

Pode parecer óbvio que A > B funcionaria, mas para alguns casos não, e daria errado. Esse link que o Fernand Rossa divulgou fala de um jeito mais resumido:
https://msdn.microsoft.com/en-us/library/c151dt3s.aspx
Mas vcs podem ver um exemplo nesse link, também da documentação do C#, do porque pode dar errado:
https://msdn.microsoft.com/…/library/ya2zha7s(v=vs.110).aspx

É um problema muito importante para computação que necessita de precisão muito grande de resultados, como problemas de engenharia. Mas geralmente na área de jogos ele acaba não sendo tão relevante, e por isso muita gente acaba não sabendo disso.

Informativo de Leonardo Pereira: https://www.facebook.com/ltorpereira?hc_ref=ARS69EpNMLAV9EGZCS35pTwcmLiYwNg2Xou5_U06NEfek6oEchdWO94nHbQYJffYMzc
No post: https://www.facebook.com/groups/unity3dbr/permalink/1780010805351473/
No fórum da Unity Brasil: https://www.facebook.com/groups/unity3dbr/?hc_ref=ARS69EpNMLAV9EGZCS35pTwcmLiYwNg2Xou5_U06NEfek6oEchdWO94nHbQYJffYMzc

Dicas de Otimização da Unity (Optimize Apps powered by Unity) para mobile part 1

Standard

Bom, não vou delongar o texto aqui e tampouco encher linguiça com blá blá blá, como dev quer mesmo a parte de código ou de qualquer coisa adicional já irei postando logo abaixo. Antes que você se apresse esse é um pequeno post que coloca em prática algumas coisas que tenho aprendido em cima de Unity (e é bem passageiro, e o foco é 100% em mobile ( e games que deveriam rodar em pcs MUITO velhos ), logo podemos chamar esse post de part 1 🙂  :

1 – Tu quer mesmo usar NavMesh?

Pense e repense antes de usar, Waypoints podem ser uma alternativa muito mais leve dependendo do que você tem planejado,

Por mais que você deixe as coisas otmizadassas no navmesh o uso deles (bake e bla bla bla não colam, é pesadinho o danado!) pesa em plataformas mobile, então repense sem que for usar!

2 – Quer resolução de 10000k em um smartphone? SAI FORA!

Uma das coisas mais estranhas que o mundo mobile tem é isto, se você reduz a resolução do que você quer exibir controlando o canvas o resultado é um ganho de performance do tamanho do planeta terra (SIM, ISSO PROCEDE)!

3 – “Tudo em uma scene gigante”! SAI FORA!

Uma das coisas mais simples de se fazer para se ter ganho é ter várias scenes para uma scene gigante, é bem melhor deixar o player tendo em vista um “LOADING” que deixa tudo muito leve depois a não ter nada e muitíssimos objetos na ram escassa do device comendo tudo do device!

4 – Um bonus …

Um link muito interessante é o que vou postar abaixo, veja o link com carinho, valerá a pena :).
https://forum.unity.com/threads/unity-5-android-performance-tips.437695/

 

 

Quem disse que a Canonical desistiu do Unity na versão 11.04? Mito! Estimam ele no stable!

Standard

Quem falou que a Canonical simplesmente vai abandonar o Unity da versão 11.04 do Ubuntu?
Isso é mito!

Muito pelo contrário, a Canonical reafirmou recentemente que irá sim utilizar o Unity junto ao Ubuntu 11.04, confirmou apenas que neste momento o Ubuntu ainda está passando por um processo de desenvolvimento bastante acelerado e que ainda precisavam corrigir muitas coisas e tornar o Unity um ambiente X mais estável!

No launchpad já se pode perceber quão acelerado está o desenvolvimento do mesmo. A Canonical ainda afirma que o Unity vai prover uma experiência mais agradável entre usuários que utilizam-se de facilidades do ambiente X.

https://launchpad.net/unity/+milestone/3.8.8

Vejam a mensagem enviada a lista:

Hello, I followed up on the @ubuntu-desktop list to let people know that 11.04 was still slated to default to Unity, and to give people a chance to escalate concerns. I cc’ed the @ubuntu-devel list as well for completeness. I do not believe any escalations have occurred or that the Desktop team has changed it’s plan to default to Unity. Positions held about the appropriate default were split in supporting Unity or Classic as the default. Objections to defaulting to Unity fell into 2 categories, functional regressions and instabilities. Points regarding functional regressions cited lack of panel applets, lack of systray support, and poor Focus Follows Mouse experience. Instabilities were typically frequent crashes in Unity/Compiz. I followed up directly with the Desktop and Dx teams with regard to these issues. Panel applets and systray icons have been deprecated from Ubuntu in previous releases. However, they still work in Classic mode, so users who have not migrated from these technologies will be supported in that mode. Furthermore, for 11.04, systray support can be added to Unity via a whitelist. In terms of the instability of the system, the Desktop and Dx teams report that most remaining instabilities in Beta 2 are crashers related to making changes in ccsm. These crashers, and the other known widespread crashers are either fixed in Beta 2, or are scheduled to be fixed in the current Dx milestone that ends this week. See the Critical and High bugs here: https://launchpad.net/unity/+milestone/3.8.8 The Desktop Team still feels strongly that Unity will provide the better experience for most users, is stable enough to ship, and will be more stable by the time final media is spun. I hope that I have accurately summarized the positions on all sides. Please let me know if I can answer any more questions or provide more context. Cheers, Rick

Avaliação (review) Ubuntu 11.04 com Unity (Gestor de Sessão)

Standard

Em primeira mão confesso (litte_oak) que estava com o coração na mão ao ver a Canonical lançar notas informando que seu gestor de sessões seria não mais o poderoso Gnome e sim uma alternativa própria chamada de Unity. Em primeira mão quero dizer que a Canonical fez um trabalho muito requintado na versão 11.04, principalmente no que tange a suporte a dispositivos proprietários. Este Review vai ater-se apenas nos detalhes como drivers, desempenho sob kernel PAE, usabilidade, estabilidade e comodidade.

Suporte a drivers do Ubuntu 11.04

Das coisas que mais me impactaram foi o suporte a dispositivos de notebooks um pouco “atípicos”, isto mesmo, estou redigindo este post em cima de um Acer com 17.3″, com core i3, 4 gb de ram, vga intel 4500 e afins. Em primeira mão quero deixar claro que as ÚNICAS distribuições que deram total suporte ao ACPI deste notebook foram Mandriva, Mageia  e Ubuntu 11.04 alpha. Abaixo segue um lspci para que vocês percebam TUDO que teve suporte nativo e sem qualquer stress:

developer@developer:~$ sudo lspci
00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 12)
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 12)
00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)
00:1a.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)
00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 06)
00:1c.5 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 6 (rev 06)
00:1d.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a6)
00:1f.0 ISA bridge: Intel Corporation Mobile 5 Series Chipset LPC Interface Controller (rev 06)
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller (rev 06)
00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 06)
00:1f.6 Signal processing controller: Intel Corporation 5 Series/3400 Series Chipset Thermal Subsystem (rev 06)
02:00.0 Ethernet controller: Atheros Communications AR8151 v1.0 Gigabit Ethernet (rev c0)
09:00.0 Network controller: Broadcom Corporation BCM43225 802.11b/g/n (rev 01)
ff:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers (rev 02)
ff:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 02)
ff:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 02)
ff:02.1 Host bridge: Intel Corporation Core Processor QPI Physical 0 (rev 02)
ff:02.2 Host bridge: Intel Corporation Core Processor Reserved (rev 02)
ff:02.3 Host bridge: Intel Corporation Core Processor Reserved (rev 02)

Todos os drivers (módulos) tiveram suporte completo.
Observem que placas Broadcom para WIFI são maioria no mercado de notebooks, então atenha-se a tranquilidade de usar e abusar do Ubuntu em termos de reconhecimento de dispositivos.

Detalhe: Quando falei de ACPI lá em cima me referi também ao controle de brilho e som (100% funcionais, sem gambiarras de ISO_ACPI ou qualquer outra coisa em inicialização do Kernel no Grub).

Desempenho sob kernel PAE

Não costumo apelar para Kernels 64 bits quando tenho apenas 4 gb de ram. Apesar de responderem melhor quando se tem processadores com instruções 64 bits, usar kernel x86_64 me trás uma insegurança no que engloba softwares de terceiros (muita gente só porta código 32 bits) e há de convir que incompatibilidades na vida de quem tem o tempo como dinheiro é coisa hedionda. Abaixo segue a prova do crime:

developer@developer:~$ uname -a

Linux developer 2.6.38-3-generic-pae #30-Ubuntu SMP Thu Feb 10 00:54:59 UTC 2011 i686 i686 i386 GNU/Linux

developer@developer:~$

Eu não sei o que faz dos desenvolvedores do Kernel do Linux seres quase perfeitos, sério mesmo, contemplar uma estabilidade e velocidade nas respostas de comandos e do próprio Unity é de arrepiar. Apesar de não ser “louco” de usar algo alpha (na verdade uma das pouquíssimas experiências Alpha testing que tive) deixo claro que seguir tal caminho junto a Canonical não é em nada arriscado!
Usabilidade
Para quem pensou que os menus seriam obra do capiroto (foi assim que pensei quando vi a nota do Unity) se enganou, no menu inicial (logo do Ubuntu que fica no canto esquerdo superior trás um menu completo com os principais itens que você precisa para ser feliz):
menu 1
Achei interessante a forma de botões que parece até coisa do mac. Aplicativos abertos colocam o menu no canto superior e operam na barra com os menus do aplicativo sobrepondo os menus da barra superior principal, ou seja, “Mac Osx style”? Mas funciona e ficou mais prático!
botoes de menu
O Docky fica muito elegante, e para ser sincero hoje “não vivo mais sem ele”. Para isto instale o mesmo usando os recursos antigos do menu. A Canonical decidiu centralizar o menu de Aplicativos em um lugar só, em órdem alfabética por nomes iniciais do que os aplicativos fazem, porém, com um menu de buscas simples de usar, o qual iremos printar uma tela e mostrar como é fácil chegar na sua central de aplicativos do Ubuntu:
centralVeja algo interessante, o que você usar como termo de busca ele há de mostrar algo caso tenha sido relacionado a um aplicativo.
Na própria central de programas do Ubuntu basta colocar o termo de busca docky e instala-lo facilmente. (o procedimento é muito parecido a instalação de qualquer outro aplicativo usando a central de apps do Ubuntu, como por exemplo o navegador do Google Chrome).
Quer coisa mais elegante que o Workspace Switcher? Ele exibe quatro áreas de trabalho de maneira eficiente para que você escolha qual ambiente estará sendo utilizado como produção, veja:
workspace switcher
Uma outra curiosidade é que o Banshee se tornou o Player padrão do Ubuntu 11.04.
Assim que foi instalado o Docky foi que pude perceber isto:
banshee
As teclas de atalho e as sombras que o compiz faz em paralelo com o Unity ficam uma coisa que dá até vontade de tocar na tela, sinceramente é uma obra de arte sem igual!
Teclas como WIN + E ou WIN + W ainda dão SHOW. WIN (bandeirinha do Window$) + W mostra os aplicativos como se fosse um zoom out, isso é a cara do Mac Os X, mas dizer que não ficou um Show é pecado, o WIN + E mostra o Workspace Switcher!
Lembre-se de habilitar os efeitos do desktop junto aos aplicativos —> Termo de Busca “Aparência” e escolha a última aba para aplicar efeitos.
Estabilidade e Comodidade
Em termos de estabilidade e comodidade tudo me agradou. Vou ressaltar 2 pontos que vi que chamam a atenção e que podem deixar alguém de primeira viagem meio “cabuloso”.
Primeiro ponto: Surgirão alguns reports de bugs, nada tão crítico, mas surgirão em detrimento de coisas que ainda hoje não estão exigindo muito dos desenvolvedores para o upstream, afinal de contas ver um bugreport baseado no envio de informações por que seu elogio do Unity na central de programas do Ubuntu apresentou crashes não vai em hipótese nenhuma fazer algum developer ou sysadmin, ou mesmo user de escritório passarem fome ;). Segue “a prova do crime”:
ferrou rsrsrs
O resto está tudo estável e só encontrei “duas baratas” no sistema, só isso, em coisas que posso considerar “perfumaria”.
O ponto da comodidade é nas updates e no modo em como cheguei até aqui.
Para fazer seu 10.10 virar 11.04 com UNITY você terá de entrar no console e digitar:
sudo do-release-upgrade -d
E ir confirmando (doido é que aparece Pressione S e só vai se apertar Y, lol).
Depois de uns 760 megas baixados e alguns longos minutos o upgrade ocorrerá sem qualquer stress.
Outro ponto final na comodidade é: Se for fazer atualizações use o console para isto usando:
sudo apt-get update && sudo apt-get upgrade -y
PRONTO!
Abraços e se este review te agrada prepara aquela caixa de Bis para nós, pls!