2012-06-29 2 views
6

구축하고 ProGuard를 실행하지 않고 안드로이드에 실행 파일을 배포 참조되지 않은 방법은 최종 실행 파일에 포함되어 있습니까?참조되지 않은 메소드가 최종 실행 파일에 포함되어 있습니까?

도 포함 된 외부 라이브러리 항아리에서 참조되지 않은 방법이 있습니까?

는 자바 컴파일러에 의존이 문제인가, 또는 어떤 경우 덱스는 모든 트리밍을합니까?

+0

하지 정확한 속는 사람,하지만 매우 유용한 정보를 많이이를 참조하십시오 http://stackoverflow.com/questions/4912695/what-optimizations-can-i-expect-from-dalvik-and-the-android- 툴체인 –

+0

@GrahamBorland 덕분에, 나는보고를 가져다가 해당 정보를 찾거나 참조되지 않은 코드가 포함되어 있는지 여부에 대해 대답 할 수 없었다. –

답변

5

I 간단한 테스트 클래스 (모든 비 참조 방법이다) 다음 APK 컴파일

public class Test 
{ 
    private void privateMethod() 
    { 
     System.out.println("private"); 
    } 

    protected void protectedMethod() 
    { 
     System.out.println("protected"); 
    } 

    public void publicMethod() 
    { 
     System.out.println("public"); 
    } 

    void method() 
    { 
     System.out.println("method"); 
    } 
} 

I, Test.class을 추출 (javap -c로)를 디 컴파일. 나는 다음과 같은 결과를 얻었다. 또한 APK 대신 항아리로 테스트 한 결과는 정확히 같습니다. Java 1.6.0_29를 사용했습니다. 에만 개인 기능을 의미

protected void protectedMethod(); 
    Code: 
     0: getstatic  #44    // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #47    // String protected 
     5: invokevirtual #46    // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: return   

    public void publicMethod(); 
    Code: 
     0: getstatic  #44    // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #48    // String public 
     5: invokevirtual #46    // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: return   

    void method(); 
    Code: 
     0: getstatic  #44    // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #49    // String method 
     5: invokevirtual #46    // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: return   

는 컴파일시에 제외됩니다.

는 또한 클래스 final를 선언하려고했으나 결과는 동일했다.

+2

이것은 실제 컴파일러에 따라 다를 수도 있습니다. 또한 우리는 안드로이드에 있으므로 dexification 단계는 코드를 최적화 할 수도 있습니다. – Robert

+0

@ 로버트 Dalmas가 어떻게 apk로 컴파일하고 dexing을 피할 수 있었습니까? –

+1

예, APK의 classes.dex에서 클래스를 추출했습니다 (dex2jar 사용). 그러나, 나는이 최적화가 Java 컴파일러에서 발생하는지 몰랐는지 알 수 없다. – Dalmas

관련 문제