저는 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
내가 이해하지 못하는 부분이 거의 없습니다.
- 이 코드를 android 2.2.1 lib에서 컴파일하는 데 실패한 경우 어떻게 런타임에 휴대폰에서 오류가 발생하지 않습니까? (GINGERBREAD도 찾을 수 없다는 점에 유의하십시오.)
- 이 문제를 해결하는 방법은 무엇입니까? 나의 제한된 maven 지식에 대해 유감스럽게 생각합니다.
대상을 Maven에서 4.2로 사용하고 있지만 min sdk 버전은 2.2.1입니다. 두 가지 모두에 대해 컴파일하려고하지만, 내가 추가 한 코드는 필요한 클래스가 사용 가능할 때만 런타임에 실행되도록 sures를 만듭니다. Maven에 이러한 런타임 종속성을 추가하는 메커니즘이 있습니까? –
최소 또는 대상 SDK 버전이 무엇이든 상관 없습니다. 컴파일이'StrictMode'를 인식하게하려면, 그것을 가진 안드로이드 버전, 즉 2.3 이상으로 컴파일해야합니다 –