2014-11-13 1 views
4

기기에 설치된 최신 Android SDK에 이전 버전의 코드가 모두 포함되어 있다면 궁금합니다.모든 Android 기기에 이전 SDK 버전이 모두 포함되어 있습니까?

내 앱에서 API 레벨 10을 타겟팅하고 Lollipop이있는 기기에 설치하면 3 년 전과 똑같은 진저 브레드 SDK를 사용하고 가져올 수 있습니까?

또는 많은 종류의 검사 및 스위치가있는 모든 버전에 대해 하나의 코드베이스 만 존재합니다. 그런 다음 어떤 종류의 호환 모드로 실행되어 올바른 코드를 선택하고 SDK I 대상 버전의 메서드를 활성화합니까?

android:targetSdkVersion specified in Manifest에 대한 기사를 읽었지만 내부적으로 어떻게 작동하는지 알고 싶습니다.

+2

아니요, 일반적으로 버그는 이전 버전과 호환됩니다. – user1095108

+0

@ user1095108 예,하지만 이전 버전과의 호환성은 어떻게 실현됩니까? 시스템에 이전 버전의 코드가 포함되어 있지 않다고 말하면됩니다. 현재 SDK에서 더 이상 사용할 수없는 메서드를 사용하면 어떻게됩니까? 또는 메소드의 코드가 변경되면 어떻게 될까요? 시스템은 원래 코드를 어디에서 얻을 수 있습니까? –

+0

SDK는 개발자가 사용할 수있는 인터페이스를 제공하며 인터페이스는 이전 버전과 호환됩니다. – bladefury

답변

-1

최신 안드로이드 SDK가있는 코드를 작성하여 장치에 설치 한 경우. 그것은 실제로 당신이 코드를 컴파일/실행하는 동안 최신 android.jar (프로젝트에서 android.jar 파일을 볼 수 있음) 파일을 사용하고 있다는 것을 의미합니다.

진저 브레드 장치에 응용 프로그램을 설치 한 경우 android.jar (최신)는 진저 브레드 장치에서 코드를 실행하는 데 이전 버전과의 호환성이 있습니다 (상위 API에서 대상 SDK 버전 10 및 실행중인 응용 프로그램을 정의한 경우). 수준이면 대상 장치 이외의 각 장치에서 호환 동작이 비활성화 된 경우를 제외하고는 원활하게 실행됩니다.

+0

그게 전부 좋긴하지만 전혀 대답하지 않습니다. –

0

좋아, 난 그냥 여기에 찾을 수있는 소스 코드 주위에 서핑 (https://github.com/android/platform_frameworks_base). 나는 안드로이드 프레임 워크의 엔지니어가 아니에요, 나는 당신의 질문에 대해서 궁금해했고, 제가 발견 한 것은 여기에 있습니다.

다른 버전의 소스 코드를 모두 포함하지는 않습니다. 점점 더 많은 버전이 출시되면 악몽을 꾼다는 것을 상상할 수 있습니다. 무엇보다도, 같은 방법을 유지하기 위해 수정하지 않고 동일한 메소드의 다른 버전 (버그가 있음)을 사용하게됩니다. 소스 코드에서

, 당신은이 같은 장소를 찾을 수 있습니다 ( https://github.com/android/platform_frameworks_base/blob/59701b9ba5c453e327bc0e6873a9f6ff87a10391/core/java/com/android/internal/view/ActionBarPolicy.java#L55 참조)

public boolean hasEmbeddedTabs() { 
    final int targetSdk = mContext.getApplicationInfo().targetSdkVersion; 
    if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN) { 
     return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs); 
    } 

    // ... 
    return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb); 
} 

그래서 안드로이드 개발자가 필요한 경우 코드의 버전 확인을한다. 그러나이 수표는 당신이 생각하는 것만 큼 필요한 것은 아닙니다. 방법을 변경하는 이유는 무엇입니까?

  • 버그가 있습니다. 버그 수정 : 버그 수정. 테스트는 메서드의 일반적인 동작이 동일하게 유지되도록합니다.
  • 메서드는 더 이상 사용되지 않습니다. 메서드를 제거 할 수 없습니다. 메서드를 제거 할 수 없습니다. 사용하지 않는 것으로 표시하고 최상의 결과를 얻으 려합니다. 컴파일러가 나머지를 처리합니다.
  • 메서드 동작이 변경되어야합니다. 글쎄, 나는 그들이 쉽게 할 수없는 것이라고 생각합니다. 그들은 버전 코드 (꽤 못 생겨 유지 보수의 악몽이되어 버렸습니다)로 해결하거나 새로운 API를 소개하기 만하면됩니다. 그것이 동일한 API를 많이 사용하는 이유입니다.
관련 문제