2012-05-17 3 views
0

저는 Android와 Java의 초보자입니다. C/C++/C#에 대한 많은 경험이 있습니다. 위에서 언급 한 언어에서Java/Android의 디버그 전용 메서드 또는 인터페이스

class WellNamedClass { 
    void greatMethodToCallWhenever() { /*...*/ } 

    void debugOnlyMethod() { /*...*/ } 
} 

, 나는 것 중 하나는 전체 debugOnlyMethod 방법 밖으로 #ifdef와 또는 밖으로 구현 #ifdef와 단순히 아무것도하지 않는다, 그래서하지만이처럼 보이는

내가 인터페이스에있다 Java에는 전처리 기가 없습니다.

우리는 디버그 빌드에 있는지 여부에 관계없이 코드를 작성하고 런타임에 확인하는 것이 매우 편안하지만 그렇게하는 방법을 찾을 수조차 없습니다.

this one과 같은 제안을 발견했습니다. 여기서 디버그 (또는 원하는 것)를 사용할 수 있는지 여부를 나타내는 상수로 클래스를 생성합니다. 이것은 작동 할 수 있지만 수동으로 코드를 변경하여 디버그 대 릴리스 빌드를 가져와야합니다.

누구든지이 문제를 해결 했습니까? 감사.

답변

0

우리가 사용하려고하는 방법은 디버그 모드에서 실행 중인지 여부를 알려주는 기본 구성 요소에 JNI 호출이 있어야한다고 생각합니다. 어쨌든 네이티브 컴포넌트가 있어야하며, 시작시 몇 가지 JNI 호출을 할 것이므로 C++에 프리 프로세서가 있으므로 비교적 간단한 솔루션입니다.

0

나도 몰라 왜 당신이 필요합니까, BTW이 같은 정적 전역 변수를 넣을 수 있습니다 :

class WellNamedClass{ 

public static final boolean DEBUG = true; 
... 
} 

를하고 사용하여 디버그 방법을 확인 if 문 같은 :

if(WellNamedClass.DEBUG){ 
    debugOnlyMethod(); 
} 

자바로 시작하면 이걸 가지고 놀 수 있습니다.

더 많은 경험을 얻으면 주석, aop 또는 기타 고급 프로그래밍 기법을 사용해 볼 수 있습니다.

+1

좋은 생각인데, 코드를 변경하지 않고 빌드 빌드와 디버그 빌드를 빌드 할 수있는 방법을 선호합니다. – SirPentor

+1

@richarbernal, "고급"프로그래밍 기법 중 어느 것도 빌드 (디버그/릴리스/등)에 따라 다른 가치를 갖는 방법에 대한 OP의 근본적인 문제를 해결하지 못합니다. –

+0

그런 다음 상수의 인스턴스에 디버그 모드 옵션이있는 구성 파일을 두거나 프로그램 매개 변수를 읽어야합니다. – richarbernal

0

이 작업은 가능하지만 수동으로 코드를 변경하여 디버그 대 릴리스 빌드를 으로 가져와야합니다.

일반적인 접근 방법 중 하나는 -D 플래그를 사용하여 시스템 속성을 VM에 전달하는 것입니다. 그런 다음 System.getProperty을 직접 사용하거나 해당 속성에서 static field을 초기화 할 수 있습니다.

System.getenv도 작동합니다.

+1

이 기술은 Android 앱에서 잘 작동합니까? –

+0

필자는 최근에야 Android로 시작했지만'adb shell dalvikvm -help '의 출력에서 ​​가능할 것으로 보입니다. –

+0

Android 용 (if BuildConfig.DEBUG) {} Gradle이이 변수를 빌드합니다. – DoctorD

관련 문제