2012-12-08 3 views
3

저는 Maven을 처음 사용하고 있으며 android 프로젝트를 설정하려고합니다. maven-android-plugin을 사용하여 기본 설정을 마쳤으며 성공적으로 프로젝트를 빌드 할 수 있습니다. 나는 내 목표 SDK 버전은 POM에서 언급 한 4.2Maven 및 Android 이전 버전과의 호환성 (android.os.StrictMode)

<dependency> 
<groupId>com.google.android</groupId> 
<artifactId>android</artifactId> 
<version>2.2.1</version> 
</dependency> 

으로 내 프로젝트의 POM에 최소 SDK 버전을 추가했습니다. 메이븐 (Maven)은 두 버전 모두에 대해 컴파일을 시도합니다. 특정 안드로이드 버전에서만 실행할 수있는 코드를 추가하면 문제가 시작됩니다. 내가 추가 한 코드는 (내가 "Displaying Bitmap Effectively" 안드로이드 교육 기사에서이 코드를 재사용하고) :

public class Utils { 
    private Utils() {}; 

    @TargetApi(11) 
    public static void enableStrictMode() { 
     if (Utils.hasGingerbread()) { 
      StrictMode.ThreadPolicy.Builder threadPolicyBuilder = 
        new StrictMode.ThreadPolicy.Builder() 
          .detectAll() 
          .penaltyLog(); 
      StrictMode.VmPolicy.Builder vmPolicyBuilder = 
        new StrictMode.VmPolicy.Builder() 
          .detectAll() 
          .penaltyLog(); 

      if (Utils.hasHoneycomb()) { 
       threadPolicyBuilder.penaltyFlashScreen(); 
       vmPolicyBuilder 
         .setClassInstanceLimit(ImageGridActivity.class, 1) 
         .setClassInstanceLimit(ImageDetailActivity.class, 1); 
      } 
      StrictMode.setThreadPolicy(threadPolicyBuilder.build()); 
      StrictMode.setVmPolicy(vmPolicyBuilder.build()); 
     } 
    } 

    public static boolean hasFroyo() { 
     // Can use static final constants like FROYO, declared in later versions 
     // of the OS since they are inlined at compile time. This is guaranteed behavior. 
     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO; 
    } 

    public static boolean hasGingerbread() { 
     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD; 
    } 

    public static boolean hasHoneycomb() { 
     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; 
    } 

    public static boolean hasHoneycombMR1() { 
     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1; 
    } 

    public static boolean hasJellyBean() { 
     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; 
    } 
} 

은 이제 문제가 시작됩니다. 이 코드는 android 2.2.1에서도 잘 돌아가고 있지만, 다음과 같은 오류로 메이븐 빌드가 실패하고 있습니다 :

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project laminar-app: Compilation failure: Compilation failure: 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[24,17] error: cannot find symbol 
[ERROR] symbol: class StrictMode 
[ERROR] location: package android.os 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[35,35] error: package StrictMode.ThreadPolicy does not exist 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[36,47] error: package StrictMode.ThreadPolicy does not exist 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[39,31] error: package StrictMode.VmPolicy does not exist 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[40,43] error: package StrictMode.VmPolicy does not exist 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[55,12] error: cannot find symbol 
[ERROR] symbol: variable StrictMode 
[ERROR] location: class Utils 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[56,12] error: cannot find symbol 
[ERROR] symbol: variable StrictMode 
[ERROR] location: class Utils 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[61,59] error: cannot find symbol 
[ERROR] symbol: variable GINGERBREAD 
[ERROR] location: class VERSION_CODES 
[ERROR] /Users/shashant/Documents/workspace/Android/laminar-parent/laminar-app/src/main/com/laminar/utils/Utils.java:[65,59] error: cannot find symbol 

내가 이해하지 못하는 부분이 거의 없습니다.

  1. 이 코드를 android 2.2.1 lib에서 컴파일하는 데 실패한 경우 어떻게 런타임에 휴대폰에서 오류가 발생하지 않습니까? (GINGERBREAD도 찾을 수 없다는 점에 유의하십시오.)
  2. 이 문제를 해결하는 방법은 무엇입니까? 나의 제한된 maven 지식에 대해 유감스럽게 생각합니다.

답변

0

StrictMode을 얻으려면 Android 2.3 이상에서 앱을 컴파일해야합니다.

IDE에서 상위 OS 버전에 맞게 앱을 컴파일해야합니다.
Maven 구성에서 동일한 버전을 사용하십시오.

+0

대상을 Maven에서 4.2로 사용하고 있지만 min sdk 버전은 2.2.1입니다. 두 가지 모두에 대해 컴파일하려고하지만, 내가 추가 한 코드는 필요한 클래스가 사용 가능할 때만 런타임에 실행되도록 sures를 만듭니다. Maven에 이러한 런타임 종속성을 추가하는 메커니즘이 있습니까? –

+0

최소 또는 대상 SDK 버전이 무엇이든 상관 없습니다. 컴파일이'StrictMode'를 인식하게하려면, 그것을 가진 안드로이드 버전, 즉 2.3 이상으로 컴파일해야합니다 –