저는 다양한 사람들이 개발 빌드와 릴리스 빌드를 테스트하는 Android 앱을 보유하고 있습니다. 개발 빌드는 난독 화되지 않으며 응용 프로그램이 난독 화되었는지 여부를 런타임에 프로그램 방식으로 결정할 수 있기를 원합니다.Android 애플리케이션이 난독 화되었는지 여부를 프로그래밍 방식으로 결정하는 방법은 무엇입니까?
이 방법이 있습니까?
저는 다양한 사람들이 개발 빌드와 릴리스 빌드를 테스트하는 Android 앱을 보유하고 있습니다. 개발 빌드는 난독 화되지 않으며 응용 프로그램이 난독 화되었는지 여부를 런타임에 프로그램 방식으로 결정할 수 있기를 원합니다.Android 애플리케이션이 난독 화되었는지 여부를 프로그래밍 방식으로 결정하는 방법은 무엇입니까?
이 방법이 있습니까?
코드베이스에 전혀 사용되지 않는 클래스를 추가하십시오. Proguard는 난독 화 및/또는 제거 할 것입니다. 따라서 앱에서 리플렉션을 통해로드하면 ProGuard를 통해 실행 된 경우 ClassNotFoundException
이 발생해야합니다.
@Sean 제안은 (외부) 종속성이없는 클래스를 사용합니다.
그러나 리터럴 문자열을 사용하지 않음으로써, ProGuard에서 반사의 사용을 감지 할 수 있습니다, 그래서 당신은 문자열의 이름에서 부하 클래스를 어떻게 든해야합니다, 조심 (아마도 텍스트 자원을?) : http://proguard.sourceforge.net/index.html#/FAQ.html%23forname
ProGuard가 R 파일을 무시하기 때문에 정확합니다. 그게 내가 생각했던 방법 이었어. 이전의 코멘트 롤 – rf43
무슨 뜻인지 잘 모르겠다. 문자열 리소스 파일에서 사용되지 않는 클래스 이름을 하드 코드 하시겠습니까? –
예. 또는 문자열을 생성하는 다른 동적 방법을 사용하십시오. –
는 항상 이름이 변경되는 클래스를 선택 난독 화 후에 Proguard에 의해. 아래 코드에서 그 이름은 ExampleClass.java
입니다. 런타임에 이름을 다음 줄과 함께 확인하십시오.
ExampleClass.java
...
public static final boolean OBFUSCATED = !ExampleClass.class.toString().contains("ExampleClass");
그게 전부입니다. 도우미 클래스 나 메서드가 필요하지 않으며 예외를 발생시키지 않고 작동합니다.
내 생각에 나는이 시도에서 결함을 찾기 위해 진지하게 시도했다 ... 나는 단지 그것을 할 수 없다. 이것은 자주 발생하지 않습니다 ... 훌륭한 답변 선생님! lol – rf43
경고가 있습니다 - 내 대답을 읽으십시오. –
저는 (일종의) 수정되었습니다. – rf43