플러터 빌드 시 에러 로그를 봐도 해결하기 어려운 문제일 시 아래의 방법을 사용해보면 좋을 것 같아 작성합니다.

 

가장 먼저 flutter doctor -v 해보는 것을 잊지말것!

 

문제가 뭘까?
  1. 내가 사용하는 플러터 버전, 다트 버전, 패키지, 라이브러리, 플러그인이 마지막으로 업데이트된 버전이 아니다. 
  2. 버전에 관련된 캐시들로 인해 문제가 있는 버전으로 계속 실행되어 에러가 나온다.

 

1번째 해결방법 = 마지막으로 업데이트된 버전이 아니다.

1. 플러터 버전을 바꿔본다.

=> FVM을 사용하여 안전하게 플러터 버전을 바꿔본 후 실행해본다. (언제든지 원래 버전을 변경 가능)

 

2. 다트 버전을 바꿔본다.

 

3. 빌드 시 에러 로그가 나오면 문제가 있는 패키지, 라이브러리, 플러그인 이름의 버전을 바꿔본다.

=> flutter pub upgrade 문제있는 패키지, 라이브러리, 플러그인 이름

 

2번째 해결방법 = 캐시들로 인해 문제가 생길경우

먼저, 플러터 관련 캐시 삭제 후 다시 다운로드 하기

flutter clean
flutter pub cache repair
flutter pub get

여기까지 CLI 실행 후 다시 실행하기 이후에도 안된다면 안드로이드 관련 문제 시, IOS 관련 문제 시로 나뉜다.

 

안드로이드 관련 문제 시 

안드로이드 폴더로 이동 후
// mac os
./gradlew clean

// window os
gradlew.bat clean

그 다음
.grade 라는 숨겨진 폴더 제거

그 후 
다시 flutter 빌드 해보기

 

IOS 관련 문제 시 

Pods 폴더, Podfile, Podfile.lock, .symlink 폴더 들을 혹시 모르니 백업 후 삭제
pod cache clean -all
pod repo update
pod install
그 후 
다시 flutter 빌드 해보기

 

많은 도움이 되셨기를 바랍니다!

네이버 로그인 기능을 추가하고 있는데 

프로젝트 이름/ios/Pods/naveridlogin-sdk-ios/NaverThirdPartyLogin.framework/NaverThirdPartyLogin' for architecture arm64

라는 에러가 나오면 실행 취소되었다. 여러가지 방법을 시도한 후 해결한 방법을 적어보려고 한다.

 

  1. 현재 개발하고 있는 flutter 프로젝트의 ios 폴더로 이동.
  2. Runner.xcworkspace를 Xcode로 실행.
  3. Runner, Pods 중 Pods 클릭.
  4. Build Settings -> All 클릭.
  5. Architectures의 Excluded Architecturese에 arm64를 추가하여 다시 실행해 본다.
AndroidManifest.xml

안드로이드 시스템이 앱의 코드를 실행하기 전에 확보해야하는 앱에 대한 필수 정보를 시스템에 제공하는 목록(빌드 툴, OS, 구글 플레이에 제공)

 

AndroidManifest.xml안의 내용

?xml version="1.0" encoding="utf-8"? : 이 문장은 이 파일이 XML 문서임을 선언하여 version과 인코딩 방식을 알려준다.

package='com.example'project_name' : 이 정보로 앱을 식별한다.

android:icon = '@mipmap/ic_launcher' : 전체 애플리케이션의 아이콘 및 애플리케이션의 각 구성요소의 기본 아이콘

android:lable '@string/app_name' : 전체 애플리케이션을 나타내는 즉, 사용자가 읽을 수 있는 기본 라벨

activity : 앱에 액티비티 컴포넌트를 등록하기 위한 태그.

intent-filter : 다른 앱에서 본인앱으로 접근하거나, 본인 앱에서 다른 앱으로 접근하기 위한 필터.

action : 인텐트 필터에 작업을 추가하는 태그. 인텐트 필터에 action 태그가 없으면 필터가 intent 객체를 허용하지 않는다.

category : 인텐트 필터에 카테코리 이름을 추가한다.

data : 데이터 사양을 인텐트 필터에 추가한다.

'개념' 카테고리의 다른 글

RESTFUL(restful)(RESTful) API가 무엇일까?  (0) 2022.06.17
Oracle(오라클)과 MySQL 문법 비교  (0) 2022.06.17
Proguard(프로가드)란?  (0) 2022.06.17
Gradle(그래들)이란 무엇일까?  (0) 2022.06.17
CDN이란?  (0) 2022.06.17
Proguard

소스 코드 난독화 및 앱의 용량을 줄여주는(필요하지 않는 멀티덱스를 제거) 프로그램이다. 소스 코드가 노출되면 안 되는 앱이나, 용량이 큰 앱에 적용하는데에 사용한다. GPL 라이센스를 갖고 있으며 어떠한 제약 조건 없이 사용할 수 있는게 특징이다.

 

멀티덱스

안드로이드 앱을 구성하는 코드는 컴파일 되어 덱스(dex) 파일로 만들어지는데 하나의 덱스(dex) 파일에는 최대 65536개의 메소드만 참조 가능하다. 만약 프로젝트의 코드가 65536개의 메소드를 초과하게 되면 덱스(dex) 파일이 여러개가 생성된다.

 그러면 멀티 덱스를 사용하여 컴파일 가능하지만, 빌드 과정에서 앱 내의 파일을 여러개의 덱스(dex)파일로 나누어야 하므로 빌드 속도가 느려지고 APK 파일의 용량이 커지게 되므로 프로가드를 통해 최적화 시켜주는게 좋다.

Gradle이란?

Gradle은 그루비(Groovy)를 기반으로 한 빌드 도구이다. Ant와 Maven과 같은 이전 세대 빌드 도구들의 단점을 보완하고 장점을 취합하여 만든 오픈소스 빌드 도구이다.

 

Ant
  • XML 기반으로 빌드 스크립트를 작성한다.
  • 간단하고 사용하기 쉽다.
  • 유연하지만 프로젝트가 커지는 경우 스크립트 관리나 빌드 과정이 복잡해진다.
  • 생명주기를 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야 한다.
Maven
  • XML 기반으로 작성한다.
  • 생명주기와 프로젝트 객체 모델이란 개념을 사용한다.
  • pom.xml에 필요한 라이브러리를 작성하면 자동으로 해당 프로젝트로 불러와 편리하다.
  • 학습 장벽이 높다.
  • 라이브러리가 서로 의존하는 경우 복잡해진다.
Gradle
  • 의존성 관리를 위한 다양한 방법을 제공한다.
  • 빌드 스크립트를 XML 언어가 아닌 JVM에 동작하는 스크립트 언어 '그루비(Groovy) 기반의 DSL(Domain Specific Language)를  사용한다.
  • 그루비(Groovy)는 자바 문법과 유사하여 쉽게 배울 수 있으며 Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 있다.
  • Maven의 pom.xml을 Gradle 용으로 변환 가능하며 Maven의 중앙 저장소도 지원하기 때문에 라이브러리를 모두 그대로 가져다 사용 가능하다.
Gradle 기본 구조
디렉토리 / 파일 설명
/.gradle
/gradle
gradle 버전별 엔진 및 설정 파일
/.idea 에디터 관련 파일들
/gradlew Unix용 실행 스크립트
/gradlew.bat Windows용 실행 스크립트
/settings.gradle 빌드할 프로젝트 정보 설정
wrapper/gradle-wrapper.jar Wrapper파일
wrapper/gradle-wrapper.properties Gradle Wrapper 설정 파일
/build.gradle 프로젝트 빌드에 대한 모든 기능 정의

 

Gradle Build Lifecycle
  1. 초기화 (Initialization) : 빌드 대상 프로젝트를 결정하고 각각에 대한 프로젝트 객체를 생성. settings.gradle 파일에서 프로젝트를 구성한다. (멀티프로젝트, 싱글프로젝트 구분)
  2. 구성 (Configuration) : 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행한다. (프로젝트 객체 구성)
  3. 실행 (Execution) : 구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상 결정. gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 태스크들을 실행.
Build 설정파일
  • build.gradle : 빌드에 대한 모든 기능을 정의
  • settings.gradle : 프로젝트 구성을 설정 (싱글프로젝트의 경우 생략이 가능하다)(Gradle은 멀티프로젝트를 구성하여 프로젝트간의 의존성 및 서브프로젝트를 구성할 수 있다)

'개념' 카테고리의 다른 글

RESTFUL(restful)(RESTful) API가 무엇일까?  (0) 2022.06.17
Oracle(오라클)과 MySQL 문법 비교  (0) 2022.06.17
AndroidManifest.xml(안드로이드매니페스트)이란?  (0) 2022.06.17
Proguard(프로가드)란?  (0) 2022.06.17
CDN이란?  (0) 2022.06.17

+ Recent posts