AppCompatActivity.onCreate só pode ser chamado de dentro do mesmo grupo de bibliotecas

107

Depois de atualizar para appcompat 25.1.0, comecei a receber erros de conexão.

No meu código:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

Recebo erro de lint:

AppCompatActivity.onCreate can only be called from within the same library group (groupId=com.android.support)

Como prevenir esse comportamento?

pixel
fonte
6
substitua invalidateOptionsMenu()por supportInvalidateOptionsMenu(). deve
servir
1
Eu não uso esses métodos em meu código
pixel

Respostas:

94

Como o Felipe já destacou em seu comentário este é um bug na versão de pré-lançamento das ferramentas.

Você pode contornar isso por agora, até que o Google lance uma correção, adicionando o seguinte ao arquivo build.gradle do módulo do seu projeto:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

É importante notar que isso pode ocultar erros verdadeiros em seu projeto, pois suprime todos os erros desse tipo, então a melhor opção seria fazer o downgrade da versão do Android Studio e das ferramentas usadas no projeto.

Martin
fonte
5
Eu sugiro a resposta de @Cbr abaixo, ela apenas suprime no nível do método e funciona no Android Studio 3, ao contrário //noinspection RestrictedApi.
Sakiboy
137

Conforme as respostas anteriores destacadas, é um bug. Eu recomendo não desabilitar o aviso de lint específico em todo o projeto, mas apenas para esse método. Anote seu método da seguinte maneira:

@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    //your code here
}
DimitrisCBR
fonte
4
Esta resposta é melhor porque não desativa globalmente, ela resolve o erro / aviso no IDE e em tempo de compilação, é fácil de entender porque está explicitamente listado no topo do método (ao contrário do //noinspection RestrictedApique está escondido como um comentário, e apenas silencia o aviso no IDE, mas não no tempo de compilação) e funciona com a versão mais recente do Android Studio e Gradle.
Sakiboy
1
Esta resposta deve ser usada. Nunca é uma boa ideia fazer um desabilitar global no projeto.
Christopher Smit
1
Você também pode usar esta anotação apenas na linha em que precisa, em vez de suprimir para todo o método
Ben Kane
64

Desativar o aviso em lintOptions não parece uma boa opção, é melhor suprimir a inspeção no nível da instrução.

Adicione este comentário acima da linha de código que fornece o aviso:

//noinspection RestrictedApi
Assassino
fonte
2
Eu vou com este. Talvez eu seja a melhor solução para não desabilitar o lintOptions globalmente. Thx
Yoraco Gonzales
4
Não funciona no Android Studio 3. Houve algumas mudanças?
vovahost
13
@vovahost que uso em @SuppressLint("RestrictedApi")vez de //noinspection RestrictedApisem problemas no Android Studio 3
vetor
1
Sim, claro, esse também funciona para mim, mas // noinspection funciona apenas para uma instrução, o que é melhor.
vovahost de
1
@Sakiboy A solução do Cbr se aplica a todo o método que eu não queria usar porque pode esconder outros erros.
vovahost