2012-12-08 2 views
3

Я новичок в maven и пытается установить с ним проект Android. Я закончил с базовой настройкой, используя maven-android-plugin, и смогу успешно построить проект. Я добавил мин SDk версии моего проекта П, какMaven и Android обратная совместимость (android.os.StrictMode)

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

Моей цель SDK версия 4.2, которая также упоминается в П. Maven пытается скомпилировать его для обеих версий. Проблема начинается, когда вы добавляете некоторый код для запуска только с определенной версией Android. Я добавил код (я повторно использовать этот код из "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, но Maven сборки неудачу со следующими ошибками:

[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. Если maven не удается скомпилировать этот код с Android 2.2.1 lib, как он не работает во время выполнения на телефоне. (Обратите внимание, что он даже не может найти GINGERBREAD).
  2. Как решить эту проблему? Извините за мое ограниченное знание maven.
  3. 3.

ответ

0

Вам необходимо скомпилировать приложение с Android 2.3 или более поздней версии, чтобы получить StrictMode.

Вы должны скомпилировать приложение в своей среде IDE с более высокой версией ОС.
Используйте ту же версию в своей конфигурации Maven.

+0

Я использую цель как 4.2 в maven, но моя версия min sdk 2.2.1. Он пытается скомпилировать его с обоими, но добавленный код добавляет, что во время выполнения он выполняется, только если доступны доступные классы. Есть ли механизм для добавления такой зависимости в maven? –

+0

Не имеет значения, каковы ваши минимальные или целевые версии SDK. Если вы хотите, чтобы компиляция распознала 'StrictMode', вам нужно скомпилировать ее с установленной версией Android, т. Е.> = 2.3 –

Смежные вопросы