Muito bem.
Bem-vindo de volta.
Tenho certeza de que você já descobriu tudo o que precisamos saber agora, mas, mesmo assim, vamos fazer
isso rapidamente juntos.
Portanto, se você acessar o diretório de downloads, eu pego esse aplicativo e o coloco em nosso diretório
de aplicativos aqui.
Favorável à privacidade.
Legal.
Está bem.
Estou usando a exclusividade comercial para esse caso no momento.
Aqui está.
Mas, como sempre, eu gostaria de dar uma olhada no manifesto do Android primeiro.
Portanto, dentro dos recursos.
Tudo bem.
Portanto, aqui podemos ver que temos duas permissões: vibrar e Internet.
Acho que a permissão de vibração é usada para sacudir esse dispositivo, de modo que você possa sacudi-lo para simular
sua função nesses dispositivos.
Mas não tenho 100% de certeza sobre isso.
No entanto, temos uma série de atividades aqui, e esta é o nosso ponto de entrada, a atividade
de splash.
Portanto, queremos dar uma olhada nesse primeiro e, em seguida, vamos ver, temos este.
Qual é o nome?
Essa é a atividade principal.
Está bem.
Tenho que rolar a tela um pouco para baixo, para a direita.
Está bem.
Portanto, aqui podemos ver que temos uma atividade principal.
Temos uma atividade sobre, temos uma atividade, temos uma atividade de configurações, uma atividade de tutorial.
E este também.
Não, isso está no provedor de conteúdo.
Está bem.
Portanto, acho que o primeiro ponto de entrada é a atividade de respingo.
Portanto, vamos dar uma olhada nesse caso.
Está dentro da privacidade do usuário definida pelo trabalho.
Portanto.
Mark é um usuário doente, mas temos uma privacidade amigável e, depois, temos o I.
Neste caso.
Aqui está essa atividade prazerosa.
Aqui, há uma decisão tomada entre o tutorial e a atividade principal.
Vamos dar uma olhada na classe de atividade principal.
Portanto, aqui estamos na atividade principal.
Vamos dar uma olhada nesse caso.
Gosto de dar uma olhada nas importações aqui.
Portanto, estamos importando alguns recursos, algumas atividades, vínculos principais, conteúdo, vínculos principais e ouvinte de
vibração.
Tudo bem.
E então vamos ver o que temos aqui.
Recebemos este modelo de avaliação.
Tudo bem.
Os sons não são tão promissores no momento.
Aqui temos o método on create.
Obtenha dados de vida ou direito.
Esse parece não ser nosso material relacionado.
Recursos que podemos ignorar.
Ou seja, aqui temos outra unidade de recursos.
Aqui temos robustez.
Isso não parece tão ruim.
Portanto, isso está nesse modelo de dispositivo.
Jogue os dados e vamos dar uma olhada nesse caso.
Ah, isso também é bom.
Então, dados.
E isso também é muito importante em relação a um aplicativo Android.
Na maioria das vezes, você pode manipular as duas coisas: pode manipular o valor em si ou pode manipular a saída
que está sendo exibida.
Acho que esse também é o caso aqui no momento.
Portanto, só poderíamos manipular os dados que estão sendo mostrados ao usuário.
Mas, em segundo plano, temos nossos dados originais.
Portanto, infelizmente, isso é algo que você pode ver por aí em relação ao malware bancário.
Portanto, o malware bancário está fornecendo algum resultado ao usuário de que provavelmente está tudo bem, de modo que a conta
e o dinheiro foram transferidos para a conta correta.
Mas, em segundo plano, os dados reais são diferentes.
Portanto, o dinheiro não foi transferido para a pessoa original.
Ele pode ter sido transferido para o atacante.
Portanto, esse é um exemplo de um aplicativo com o qual não queremos lidar.
Mas quero mencionar isso aqui, porque isso também afeta nossos aplicativos.
Por exemplo, em nossos aplicativos espaciais, também podemos ter dois valores de vida, um que está sendo
exibido e outro que está sendo usado para calcular se o jogo continua ou se o jogador perdeu todas as suas vidas
ali e o jogo acabou agora.
Portanto, se não dermos uma olhada de perto nesse caso, poderemos manipular apenas o valor que está sendo exibido.
Por exemplo, o jogador vive, então temos mais de 9.000 vidas de jogadores.
Mas o valor real que está sendo usado para fazer o cálculo se o jogo acabou e, portanto,
ainda poderíamos perder o jogo por ter 9.000 vidas, mas apenas na tela, não no valor que
está sendo usado para fazer o cálculo já perfeito.
Nesse caso, não queremos manipular a função show dice porque essa é apenas a saída dessa
função aqui.
Portanto, vamos dar uma olhada nesse caso.
Lance os dados.
Isso é definido no modelo de visualização do dispositivo, role os dados.
E aqui temos uma série de outras coisas.
Vejamos.
Modelagem de rótulos, números e números de faces.
Está bem.
E aqui temos esse dado de valor de postagem de dados de vida.
E depois temos o lançamento de dados.
Esses dados são dados de rolagem, talvez seja preciso dar uma olhada neles.
Então, clicamos neste aqui e lá vamos nós.
Isso se parece exatamente com a nossa função.
Queremos analisar.
Então, este aqui parece promissor porque temos que proteger o gerador de números aleatórios aqui
e podemos ver que estamos gerando um número aleatório e armazenando-o dessa forma.
Talvez devêssemos pegar nosso tablet gráfico e discutir isso rapidamente.
Não se preocupe, não vamos nos aprofundar muito nesse assunto porque se trata de liberdade.
Mas, sim, quero lhe mostrar como funciona essa função aqui.
Quero dizer, é uma função muito básica, mas, mesmo assim, vamos descobrir o que está acontecendo aqui.
Muito bem.
Portanto, aqui estamos de volta à mesa digitalizadora.
Vamos dar uma olhada rápida nesse caso.
Aqui temos nosso gerador de números aleatórios seguro.
Muito bem, então temos um método.
Lance os dados.
Então, vamos escrever isso.
Lance os dados.
E esse está retornando em uma matriz de números inteiros, uma matriz de números inteiros, e tem dois parâmetros: tamanho
do pool e número da fase.
Portanto, o tamanho da piscina.
E o número de faces e o tamanho
da piscina.
Vejamos que estamos gerando uma nova matriz de números inteiros e armazenando-a em dados em uma matriz de números inteiros
de dados.
E aqui podemos ver que temos o comprimento do ponto do dado.
Isso significa que o primeiro parâmetro é o tamanho do pool, que é a quantidade de dados que temos.
Portanto, nossa matriz de inteiros aqui, vamos ver os dados da taxa de inteiros e essa é agora a quantidade de diálise que
temos.
Portanto, este é um para um e três, por exemplo, OC e, em seguida, temos o número da fase.
Portanto, estamos iterando sobre este aqui.
Portanto, isso está claro.
Está bem.
E então temos esse número de fase, que agora está sendo usado no próximo int aleatório.
Portanto, estamos preenchendo essa matriz agora com números e esses números estão sendo calculados com base
na próxima extremidade aleatória aqui nesta.
Portanto, esses números que estão sendo gerados, por exemplo, esse número um, talvez seja melhor fazer dessa forma,
e esse número um está sendo armazenado nessa matriz aqui.
Portanto, este está mantendo o número um.
E ao gerar esses números aleatórios, por exemplo, um, quatro, um e três, estamos gerando nossos
dados aqui.
Portanto, esses dados estão sendo armazenados nessa matriz de dados e esse é finalmente retornado aqui.
Portanto, essa matriz de dados está sendo retornada.
Isso significa que todas as funções funcionam da seguinte maneira.
Estamos gerando alguns números aleatórios aqui com a função next int random next in e, em seguida, simplesmente
os armazenamos em uma matriz nesta aqui.
Depois disso, estamos simplesmente retornando uma matriz inteira contendo esses números e, em seguida,
o aplicativo está lançando esses dados, a quantidade de dados, que se baseia na quantidade de números aqui e também
no estado.
Esses dados com os números corretos, esses.
Portanto, é assim que essa função funciona.
Perfeito.
Portanto, agora temos muitas opções para corrigir essa função e usaremos várias delas.
Portanto, quero mostrar ou fornecer muitas opções para lidar com esse aplicativo e manipulá-lo,
de modo que o resultado, por exemplo, aqui sempre mostre o que está sendo calculado nessa função aqui
antes.
Muito bem.
Isso é algo que faremos nas próximas seções, mas faremos isso passo a passo, portanto, não começaremos corrigindo toda
essa função.
Neste momento, começamos com uma tarefa diferente, esta aqui.
Portanto, antes de corrigirmos o valor de retorno, vamos primeiro tentar observar os parâmetros dessa função
aqui.
Nós conectamos esse método aqui e depois observamos esses parâmetros.
Portanto, imprimimos essas instruções de depuração que vimos no método on resume.
Mas, desta vez, com relação a esses parâmetros, não falamos sobre isso até o momento.
Portanto, fazemos isso juntos.
Caso você já esteja familiarizado com a Rita, é claro, sinta-se à vontade para tentar fazer isso por conta própria agora mesmo.
Você também pode tentar já corrigir toda essa função para que ela retorne determinados valores.
Por exemplo, cinco vezes seis ou cinco vezes um ou um, dois, três, quatro, cinco, como você preferir.
Muito bem.
Portanto, isso é tudo para este vídeo no momento.
E não se preocupe com essa parte gratuita.
Começaremos com isso juntos no próximo vídeo e descobriremos como imprimir esses parâmetros
de função.
Em seguida, aplicaremos ainda mais patches, passo a passo, até termos tudo o que precisamos saber sobre hooking
e método de classe.
Muito bem.
Está bem.
Portanto, estou realmente ansioso para vê-lo no próximo vídeo.