App Android é compatível com 10,0 Sistema

Pequim vez em 14 março de 2019 o Google lançou oficialmente Android Q Beta 1 e SDK de visualização, o que significa que os desenvolvedores Android estava prestes a inaugurar uma nova versão do trabalho anual adaptação. Q Android para desenvolvedores que trazem muitas características novas, tais como dobramento de tela sobreposição de itens avançados, uma nova conexão de rede API, decodificador de mídia nova, câmera, novas funcionalidades, expansão NNAPI, Vulkan 1.1 gráficos apoiar  e assim por diante.

1. Rights

<usos-permissão Android: name = "android.permission.ACCESS_BACKGROUND_LOCATION" />
<usos-permissão Android: name = "android.permission.READ_PRIVILEGED_PHONE_STATE" /> 
<usos-permissão Android: name = "android.permission.CAMERA" / >         
<usos-permissão android: name = "android.permission.ACCESS_FINE_LOCATION" />
 

2. Modificar a versão compilada e a versão de destino

compileSdkVersion 29 (28+)

targetSdkVersion 29 (28+)

 

foto álbum 3. Selecione problemas de permissão

Adicionar a próxima aplicação de etiquetas

android: requestLegacyExternalStorage = “true”

caminho de pasta 4. Get

Corda savepath = Environment.getExternalStorageDirectory () + “/ DownFile /”;

O método acima, para ser substituído após a aquisição, de outro modo falhar
Cadeia savepath = getExternalCacheDir () + " / DownFile /";

 

5. Android Q mudança de comportamento: todas as aplicações

A parte oficial destes documentos independentes de mudanças de comportamento Q: todas as aplicações para introduzir, porque isso é parte de uma grande e importante, a maior das quais é a mudança de direitos de privacidade dos usuários de atualização. permissão específica para a mudança é a seguinte:

competência aplicativos afetados Como habilitar (esfera de influência)
direitos de armazenamento acesso a aplicativos e arquivos de dispositivo de armazenamento externo compartilhados adb concha sm conjunto-isolado de armazenamento-de (descrito abaixo)
direitos de posicionamento Acesso aplicação de pedido de informação da localização do usuário em segundo plano Esta política de permissão no Android Q está sempre ativada
Atividade iniciado a partir do fundo Ele não requer interação do usuário para iniciar a aplicação de Atividade Fechar permite que o sistema para executar opções de atividades fundo para permitir aos desenvolvedores limite
identificador de dispositivo (deviceId) número de série do equipamento de acesso ou aplicações IMEI Aplicação do dispositivo montado na montagem Android Q
Privilégios de digitalização sem fio aplicação API WLAN usando a API Bluetooth eo Com Q Android para a plataforma de destino

mudanças menos afetar as permissões de início da atividade e permissão de digitalização sem fio de fundo duas permissões, este artigo descreve não, você pode ver os detalhes, consulte o documento oficial: https: //developer.android.com/preview/privacy/background-activity- começa
começar a permissão Atividade de fundo alterações somente para nenhuma interação com o usuário sobre a situação para iniciar uma Actividade, (tais como autorização de pouso micro-channel).

Este artigo incidirá sobre os direitos de armazenamento, permissões e mudança e posicionamento adaptação dispositivo identificador de três permissão.

1. Mudança de direitos de armazenamento do usuário

Q Android no dispositivo de armazenamento externo fornece uma "caixa de areia isolado de armazenamento" (por exemplo, / sdcard) para cada pedido. Qualquer outra aplicação não pode acessar diretamente o arquivo sandbox sua aplicação. Uma vez que o arquivo é um arquivo privado a sua aplicação, para que você não precisa de nenhuma permissão para acessar e salvar seus arquivos em um dispositivo de armazenamento externo. Esta mudança vai tornar mais fácil para garantir a privacidade dos arquivos do usuário, e ajuda a reduzir o número de permissões exigidas pelo aplicativo.
Google arquivo do aplicativo oficialmente recomendado é armazenada na caixa de areia endereço para os Context.getExternalFilesDir()arquivos na pasta. Por exemplo, para guardar uma imagem deve ser colocado Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)em.

Endereço do arquivo de destino a seguir irá descrever como a adaptação de acesso:

  1. Acesse seus arquivos: Q com permissão de mídia específico mais granular substituídas e canceladas  READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGEautoridade, e não precisa de permissão específica, os aplicativos podem acessar seus próprios arquivos na caixa de areia.

  2. O acesso aos arquivos de mídia do sistema: Q introduz uma nova definição de um conjunto compartilhado de arquivos de mídia, se você quiser acessar o compartilhamento de mídia arquivos fora do sandbox, como fotos, música, vídeos, etc., necessidade de solicitar um novo direitos de mídia: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO, para aplicar o mesmo os originais permissões de loja.

  3. Baixe o acesso ao sistema de arquivos: o acesso ao sistema pasta de download, restrições temporárias não, no entanto, o acesso a quais arquivos em outras aplicações, o sistema deve permitir aos usuários utilizar o seletor de arquivos para selecionar o arquivo do aplicativo.

  4. Acesso outras aplicações arquivo em modo seguro: Se seu aplicativo precisa usar um arquivo criado em outros aplicativos no sandbox, clique sobre o arquivo usando outras aplicações, este artigo não descrever.

Então, por favor juiz quando o aplicativo é executado na plataforma Q, cancelar a aplicação das duas permissões READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE. E substituído por um novo permissões específicas-media.

Quando cada uma das seguintes condições são satisfeitas, o modo compatível aberto, isto é, não abrir o dispositivo de armazenamento altera as permissões Q:

  1. Aplicação targetSDK <= P.
  2. Aplicativo instalado no Android P para atualizar a partir de dispositivos Android Q.

Quando aplicado para reinstalar (atualização), não vai voltar a abrir o modo de compatibilidade, armazenar permissões alterações terão efeito.
Portanto, de acordo com o documento oficial disse, independentemente de targetSDK Q, deve solicitar permissão para alterar o adaptador de armazenamento.
No teste, quando targetSDK <= P, duas aplicações na velha direita Q Beat1 Edição alterado automaticamente para aplicar três novos direitos, a aplicação não afeta o uso normal, mas quando targetSDK == Q, a aplicação irá falhar velha direita e afetar o uso normal de aplicações.

2. A autoridade de mudar o posicionamento de usuários

Para dar aos usuários mais controle sobre acesso ao aplicativo para informações de localização, Android Q introduz as novas permissões localização  ACCESS_BACKGROUND_LOCATION.

Existente  ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIONas permissões, as novas permissões só irá afectar o acesso à informação sobre a localização dos aplicativos em execução em segundo plano. aplicação atividade a menos que um visível ou aplicativo está sendo executado recepção, caso contrário, o pedido será considerado no fundo.

Como com sistema iOS, Q também acrescentou autoridade local em segundo plano ACCESS_BACKGROUND_LOCATION, se também é necessária a aplicação para obter a localização do usuário (como gotas) no fundo, você precisa aplicar dinamicamente ACCESS_BACKGROUND_LOCATIONacesso.

É claro que, se não for necessário, a aplicação sem quaisquer alterações, eo Google vai fazer um tratamento diferente de acordo com a aplicação de targetSDK:
aplicação targetSDK <= P se o pedido ACCESS_FINE_LOCATIONou  ACCESS_COARSE_LOCATIONpermissão, dispositivo Q vai ajudar automaticamente você aplicar para ACCESS_BACKGROUND_LOCATIONa permissão.

3. Altere o identificador único do dispositivo

Começando Android Q, a aplicação deve ter um  READ_PRIVILEGED_PHONE_STATEidentificador não-reajustável (IMEI e número de série incluído) permissão assinado para acessar o dispositivo.
Se a sua aplicação sem essa permissão, mas você ainda tentar consultar identificador de informações, ele irá retornar um valor nulo ou um erro.
O dispositivo precisa de identificadores exclusivos de atenção especial, o original READ_PHONE_STATEautoridade tem sido incapaz de obter IMEI e de série.

Para obter o dispositivo usando o seguinte código no dispositivo ID Q

((TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId()
  • 1

O código acima é executado para devolver um valor nulo (targetSDK <= P) ou erro (targetSDK == Q). E disse o funcionário READ_PRIVILEGED_PHONE_STATEpermissão está disponível apenas para aplicativo do sistema, de modo que este método não trabalho.

Google oficial deu um dispositivo único melhores práticas de identificação, mas este método determinada variável ID, pode ser resolvido de acordo com as necessidades específicas de específico. Este artigo fornece um método UUID substancialmente constante e repetível:

public static String getUUID() {
    String serial = null;
    String m_szDevIDShort = "35" +
        Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
        Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
        Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
        Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
        Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
        Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
        Build.USER.length() % 10; //13 位

    try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                serial = android.os.Build.getSerial();
            } else {
                serial = Build.SERIAL;
            }
            //API>=9 使用serial号
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
      }
    //使用硬件信息拼凑出来的15位号码
    return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}

Embora a mudança vai levar a uma autoridade identificador único android.os.Build.getSerial () retorna desconhecida, mas porque a luta é a informação hardware m_szDevIDShort fora, por isso ainda garantir a unicidade ea durabilidade UUID.
Resultados da saída de teste são como se segue
Aqui Insert Picture Descrição

O método acima foi testado em exatamente o mesmo quando ele pode ser repetido, online, bem como outros programas, como androidID, mas androidID pode retornar modelos nulos devido razões, tanto para escolher entre duas maneiras de pensar. Obter uma versão do ID do dispositivo é mais resistente do que uma versão, se não é um bom método de boas-vindas que.

4. Sobre aviso minSDK

Em Android Q, quando um usuário primeiras corridas com Android 6.0 (nível API 23) as seguintes versões para qualquer plataforma de destino aplicativo, a plataforma Android irá emitir um aviso para o usuário.

Se o aplicativo requer que o usuário conceder a permissão, o sistema irá primeiro fornecer aos usuários a oportunidade de ajustar a permissão aplicativo antes de permitir que esta aplicação é executado pela primeira vez.


6. Android Q mudança de comportamento: A Q Android para os aplicativos da plataforma alvo

Não limitativos de interface SDK

Não limitativos de interface SDK foi proposto no Android P, Q, no entanto, a interface é restrita a classificação grandes alterações.

Introdução de espécies não-Interface SDK

A fim de garantir a compatibilidade estabilidade e aplicação, a plataforma Android começou a limitar seu aplicativo pode usar a interface em que não SDK em Android 9 (nível API 28). Não restrita lista de interfaces SDK inclui a actualização do Android Q (com base em testes internos e da mais recente colaboração entre desenvolvedores e Android).
Não limitante de interface SDK é um método privado no SDK, tais como métodos privados, obtém chamada pela reflexão Java e afins, então a chamada será alvo> = P ou destino> = Q está limitada ao uso no dispositivo, quando você usar esses métodos, vamos reclamar

método de aquisição Mensagens de erro
instruções Dalvik referência a um campo NoSuchFieldError jogado
instruções Dalvik referência a um método NoSuchMethodError jogado
Reflexão através Class.getDeclaredField () ou Class.getField () NoSuchFieldException jogado
Reflexão através Class.getDeclaredMethod (), Class.getMethod () NoSuchMethodException jogado
Reflexão através Class.getDeclaredFields (), Class.getFields () Não SDK não membros nos resultados
Reflexão através Class.getDeclaredMethods (), Class.getMethods () Não SDK não membros nos resultados
JNI via env-> GetFieldID () NULL retornado, NoSuchFieldError jogado
JNI via env-> GetMethodID () NULL retornado, NoSuchMethodError jogado

Encontrar um não-Interface SDK

Se você não tem certeza se seu aplicativo usa uma interface não-SDK, você pode testar o aplicativo para confirmar. Quando você chamar uma interface não-SDK estarão acessando semelhante log XXX oculto:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
  • 1

Mas no final um grande projeto onde o uso destes métodos dependem do código e analisar o log para ver certamente não é realista, Google oficial também forneceu inspector oficial Veridex usado para detectar um apk onde o uso de interface não-SDK. Veridex Download: https://android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat
incluindo Windows, Linux e Mac versão, o download correspondente. Deve extrair a linha CD Veridex diretório usando ./appcompat.sh --dex-file = Q.apk automaticamente varredura. Q.apk caminho absoluto para o pacote, se o pacote eo pacote Veridex nome do arquivo de entrada diretamente no mesmo diretório. Os resultados da verificação dividido em duas partes, uma parte das interfaces sem chamada SDK posição, uma outra parte do número de estatísticas de interface não-SDK.

adaptador de interface não-SDK

Se o seu aplicativo depende de interface não-SDK, você deve começar o planejamento para migrar para o SDK alternativa. Se você não consegue encontrar uma alternativa ao uso de interface não-SDK é uma função da aplicação, você deve solicitar uma nova API pública.

requisitos oficiais targetSDK> = aplicação de P não usar esses métodos, e procurar outras alternativas para essas interfaces API SDK não pública, se não, você pode aplicar para o Google, solicitar uma nova API pública: https: // developer. android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces#feature-request

Existem dois projetos que utilizam interface não-SDK para uma alta probabilidade:

  1. Ver personalizado no processo utilizado para a conveniência de modificar um parâmetro que reflete.
  2. No uso de sem partido interfaces de SDK SDK (tais casos mais).

A primeira é uma boa solução, afinal, é escrever nosso próprio código. A segunda dor de cabeça, apenas para atualização para a versão mais recente do SDK tripartite, ou mencionar a ordem de trabalho, através do banco (também a maior parte de todo o processo de trabalho de adaptação).


7. Problemas de projeto de atualização Android encontradas

Simulator X 86, SO projetar v7 biblioteca

  • Encontrar o código-fonte de modo biblioteca, compilados em x86
  • Se assim for a biblioteca apenas para usar um ponto de recurso, nenhuma grande APP impacto global sobre, para que possa bloquear as funções da biblioteca específicas ou saltar teste
  • Se assim for a biblioteca é o projeto de biblioteca de núcleo deve ser carregado, também pode ser medida usando Tencent nuvem, não há Google própria versão filho Q do acima. medições nuvem Tencent tem adb recursos de depuração remota de conexão (que não tiveram sucesso). adb Rom não importa, é instalado diretamente sobre a linha, a nuvem pode ser medido diretamente olhar para o log.
  • Como eu tentei entre Houdini estudado, por isso, teoricamente pode ser instalado na biblioteca compilada emulador v7 x86, mas devido à relativamente pequena introdução ao Houdini também mais velhos, propusemos o tempo não é suficiente, então não estudam.

Requer plataforma de desenvolvimento Q mas esta é uma plataforma de lançamento.

Q é devido para a versão atual de visualização, para que a aplicação targetSDK == Q só pode ser executado no dispositivo Q.

INSTALL_FAILED_INVALID_APK: Falha para extrair bibliotecas nativas, res = -2

Este erro é devido à compressão de modo a biblioteca embalado causada por razões específicas visto: https: //issuetracker.google.com/issues/37045367
juntar-se a aplicação de nó AndroidManifest.xml android:extractNativeLibs="true"
podem ter sido adicionados acima do código ou não, em app / DefaultConfig nó é adicionada sob build.gradle

packagingOptions{ 
      doNotStrip "/armeabi/.so" doNotStrip "/armeabi-v7a/.so" doNotStrip "/x86/.so" }
  • 1
  • 2

Não encontrou classe “org.apache.http.client.methods.HttpPost"

Foi adicionado ao nó de aplicativo AndroidManifest.xml

<uses-library android:name="org.apache.http.legacy" android:required="false"/>
  • 1

Se o seu projeto não se encaixa através do O android ou P, então você precisa prestar atenção

android O Ler um instalados permissões de aplicativos (atualizados automaticamente influente dentro do aplicativo)
o padrão android P proibir o acesso à API http

 

 

Documentos neste artigo:

Android Q Beta ligação desenvolvedor Documentação :: https://developer.android.com/preview

Android Q Beta espelho Download Link: https://developer.android.com/preview/download

Android Q Beta发布blog: https://android-developers.googleblog.com/2019/03/introducing-android-q-beta.html

Não SDK Interface: https://juejin.im/post/5afe50eef265da0b70262463
 

Publicado 39 artigos originais · ganhou elogios 19 · vê 60000 +

Acho que você gosta

Origin blog.csdn.net/u010090644/article/details/105226196
Recomendado
Clasificación