2014-06-13 6 views
7

이전 Android 버전을 지원하기 위해 버전 스위치를 사용합니다.사용되지 않는 Android 기능에 대한 특정 린트 경고를 억제하는 방법은 무엇입니까?

int sdk = Build.VERSION.SDK_INT; 
if (sdk < Build.VERSION_CODES.HONEYCOMB) { 
    ColorDrawable colorDrawable = new ColorDrawable(shapeColor); 
    //noinspection deprecation 
    viewHolder.shape.setBackgroundDrawable(colorDrawable); 
} else { 
    viewHolder.shape.setColor(shapeColor); 
} 

린트에 의해 다음과 같은 경고가 출력되는 명령 줄에서 Gradle을 사용하여 프로젝트를 빌드 할 때 : 내가 이후

app/src/main/java/com/example/MyApp/CustomListAdapter.java:92: warning: 
[deprecation] setBackgroundDrawable(Drawable) in View has been deprecated 
      viewHolder.shape.setBackgroundDrawable(colorDrawable); 
          ^

내가 (경고를 음소거 특정 라인 또는 메소드를 주석을 달 수 있습니다 그것 목적에)? 내가 할 모든 경고를 사용하지 않으려는.

+0

Android Studio를 사용하고 있습니까? – MrEngineer13

+0

@ MrEngineer13 예. 하지만 여기서는'./gradlew clean assembleDebug assembleRelease'를 통해 커맨드 라인에서 빌드하고 있습니다. – JJD

+0

커서를 viewHolder.shape.setBackgroundDrawable (colorDrawable)에 놓으면 어떻게됩니까? Alt + Enter를 누르십시오. – MrEngineer13

답변

2

lint.xml 파일을 만들어 lint에게 무시할 것을 알려줘야합니다.

http://tools.android.com/tips/lint/suppressing-lint-warnings

당신은 당신이 내가 우연히

@SuppressLint("Deprecation") 
+0

모든 지원 중단 경고를 사용 중지하지 않으려합니다. 코드의 특정 줄에 Lint 주석을 추가하는 것을 선호합니다. – JJD

+0

링크가 그것을 다룹니다. @SuppressLint ("Deprecation") inline. – bestdayever

+2

설명서에 제안 된대로'// noinspection AndroidLintDeprecation'을 시도했지만 경고가 계속 나타납니다. ** id ** **의 의미가 확실하지 않습니다. 'lintId'는 여기서 볼 수 있듯이 추출됩니다 (https://android.googlesource.com/platform/tools/adt/idea/+/jb-mr2-dev/android/src/org/jetbrains/android/). inspections/lint/SuppressLintIntentionAction.java), 줄 169. -'@SuppressLint ("Deprecation")'이 올바르게 이해되면 메소드 레벨에서만 설정할 수 있습니다. – JJD

4

같은 것을 사용해야 소스에서이 문제를 처리하기 위해 조금이

<?xml version="1.0" encoding="UTF-8"?> 
<lint> 
    <!-- Disable the given check in this project --> 
    <issue id="Deprecation"> 
     <ignore path="app/src/main/java/com/example/MyApp/CustomListAdapter.java" /> 
    </issue> 
</lint> 

처럼 보일 수 있습니다 자세한 내용은이 참조 비슷한 문제.

:compileDebugJava 
Note: /path/file.java uses or overrides a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 

당신이 @SuppressWarnings("deprecation")으로 억제 또는 그냥 경고하며 빌드가 실패 할 수 없기 때문에 무시할 수 있습니다 : 우선은 컴파일러 경고를 받았습니다. @SuppressLint("NewApi")을 추가하여

Call requires API level 13 (current min is 9) 

이 억제 할 수있다 : 는 또한 나는 보풀 오류 (build/lint-results.html의 세부 사항)를 얻었다. 또는 @TargetApi(13)을 사용하여 메소드/클래스가 minSdkVersion (예 : 9)으로 설정 한 것이 아니라 API 버전 13에 의존하는 메소드를 사용할 수 있음을 알 수 있습니다.

주석은 클래스 또는 기능 수준에서만 수행 할 수 있으며 한 줄로는 수행 할 수 없습니다. 또한 "비평가"는 대문자로 표기하지 않아야하며 "NewApi"는 중요하지 않은 것으로 보입니다. 새로운

6

그냥 뭔가 :이 행에서이 경고를 제거, 안드로이드 스튜디오 확실하지만,하지, 당신은 사용할 수 있습니다

//noinspection deprecation 

이 다음 줄에서 경고를 제거합니다. 예 :

//noinspection deprecation 
e.setBackgroundDrawable(editTextDrawable); 

오류 메시지가 표시되지 않습니다. @@JJD와 마찬가지로은 경고 메시지를 콘솔에 출력합니다. 하지만 최소한 Git처럼 유용 할 수있는 오류없는 코드를 만들 수 있습니다. 그리고 이로 인해 @SupressWarnings의 문제가 방지됩니다. 이는이 메소드의 모든 경고를 무시합니다. 따라서 당신이 모르는 것을 사용하지 않을 것이 있다면, @SupressWarnings은 그것을 숨길 것이며 당신은 경고를받지 않을 것입니다.그건 내가 @SuppressLint("deprecated") 인라인 주석이 더 이상 포착되지 않는다는 것을 발견 한 //noinspection

1

의 장점이다 - 포착되고 @SuppressWarnings("deprecation")입니다있다.

build.gradle 파일 내에서 lintOptions과 함께 Deprecation 수표를 사용 중지 할 수 있습니다. 에 상관없이 제공되는 XML - 설정 showAll true, 그것은 여전히 ​​경고가 표시됩니다 때 LintOptions:lintConfig (하나 개가 아니라 자세한 lint.xml 구성 파일을 지정할 수 있습니다에

android { 
    lintOptions { 
     disable 'Deprecation' 
    } 
} 

또는을 : 그런 개별 파일을 정의 할 기회가없는 상태 구성) :

android { 
    lintOptions { 
     lintConfig file("lint.xml") 
     showAll false 
    } 
} 

하나가 자신의 경로를 추가하여 개별 파일을 추가 할 수 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<lint> 
    <issue id="Deprecation" severity="Error"> 
     <ignore path="app/src/main/java/com/example/MyApp/CustomListAdapter.java" /> 
    </issue> 
</lint> 

com.android.builder.model.LintOptions의 소스 코드는 실제로 어떻게되는지 (그리고 내가 작성한 것의 약 50 %를 확인합니다) 설명 할 수 있습니다.

Android Studio에서 인라인 경고를 없애기 위해 ... linter가 다른 linter 인 것처럼 보입니다.이 주석은 Gradle 빌드의 linter에 영향을 미치지 않습니다 (하나의 Lint와 결합하여 사용해야 할 수도 있음).

//noinspection deprecation 

갱신 안드로이드 스튜디오 2.3 릴리스 노트 새로운 기능을 언급 :

린트 기준을 : 알려진되지 않는 클래스와 메소드)를 무시하기 위해, 위에서 언급 한 방법의 무선 Android Studio 2.3에서는 해결되지 않은 린트 경고를 프로젝트의 기준으로 설정할 수 있습니다. 그 시점부터 Lint는 새로운 문제 만보고합니다. 이것은 앱에 많은 기존 린트 문제가 있지만 새로운 문제를 해결하는 데만 집중하려는 경우 유용합니다. Lint 기준선과 새로운 Lint 검사에 대한 자세한 내용은 &이 릴리스에 추가되었습니다.

이 설명 것

here, 보풀이 경고 baseline 만드는 방법 - XML ​​파일로 감지 경고를 기록하고 (모든 장소에 분산, 인라인 코드 주석을 가지고하는 것보다 더 나은 방법입니다)을 뮤트 ; 나는 그 옵션이 lintConfigbaseline이 결합 가능해야한다고 생각한다.

android { 
    lintOptions { 
     baseline file("lint-baseline.xml") 
    } 
} 
+0

** ** 사용하지 않으려합니다 ** 모든 ** 경고. – JJD

+0

@JJD가 더 잘 설명했습니다. 기본적으로 하나의 안드로이드 스튜디오 (안드로이드 스튜디오, 살고 lints 중 하나와 구성 - gradle, lints 중 하나의 빌드) - 관심없는 모든 경고를 음소거합니다. –

+0

프로젝트의 루트 폴더에'lint.xml' (내 클래스 경로로)을 놓으면 명령에서 빌드를 실행할 때 클래스가 "사용되지 않거나 사용되지 않는 API를 사용 또는 대체합니다"라는 ** 그래도 계속 알림 ** 선. 더우기 전체 클래스를 제외하는 것은 너무 복잡합니다 ** 한 줄 또는 함수 **에 대한 비추천을 조용히하고 싶습니다. – JJD