프로그래밍 & 보안 47

Android Studio에서 Flutter 앱 에뮬레이터 실행 시 오류 해결 방법

Android Studio를 사용해서 Flutter 앱을 만들기 위해 애뮬레이터를 설정하고 실행하는 과정에서 해당 문구가 콘솔에 뜬 채로 더 진행되지 않고 멈춰 있는 현상이 발생했다. Launching lib\main.dart on sdk gphone64 x86 64 in debug mode... Running Gradle task 'assembleDebug'... 서치 결과 해당 오류를 해결하기 위한 방법을 Stackoverflow에서 찾을 수 있었다.Here is solution in my case.Open your flutter Project directory.Change directory to android directory in your flutter project directory cd and..

(Flutter) Widget을 조합하여 앱 화면 구성

Flutter Chapter 1 Recap Flutter 실습 예제를 위해 간단한 화면 구성을 해 보았다. Flutter로 앱의 화면을 구성하는 건 매우 특별한 방식을 사용한다. Named Parameter를 사용한 Class들로 Widget을 계속해서 생성하여 화면을 생성한다. import 'package:flutter/material.dart';class Player { String? name; // String? = name을 가질 수도 가지지 않을 수도 있음 Player();}void main() { var nico = Player(); runApp(const App()); // runApp 함수는 argument로 widget 타입을 받고 있다. // Flutter에선 widget들..

Flutter 2024.12.18

(Android) Jadx 를 사용하여 안드로이드 악성코드 분석하기

Jadx: Android APK 파일을 디컴파일하여 Java 소스 코드로 변환해 주는 도구로 이를 통해 Android 애플리케이션의 내부 코드를 분석할 수 있다. 보안 분석이나 악성코드 탐지 목적으로 많이 사용되며 Jadx는 GUI 방식과 CLI 방식 모두 제공하여 사용자가 편한 방식으로 접근 가능한 도구이다. (클래스, 메소드, 리소스 파일 등의 구조를 유지하면서 원본에 가깝게 소스 코드를 복원해 주기 때문에 빠르고 직관적인 분석에 유용하다.)https://github.com/skylot/jadx/releases해당 툴을 사용하기 위해서 먼저 위의 깃허브 링크로 접속하여 win-zip 파일을 다운로드 받은 뒤 압축을 해제해 준다.그리고 위의 사진과 같이 jadx-gui 파일을 클릭하여 해당 프로그램을 ..

보안 2024.10.25

(Dart) QQ Operator 와 Typedef

QQ Operator?? 와 ?= 의 의미와 사용 방법void main() { String? name; name ??= 'nico';}String capitalizeName(String? name) => name?.toUpperCase() ?? 'ANON'; ??= 의 의미: nullable 변수를 생성한 뒤 해당 변수가 null 이라면 nico 라는 값을 넣는다. left ?? right (name?.toUpperCase() ?? 'ANON';)    left 가 null 일 경우 right를 return     left 가 null 아닐 경우 left를 그대로 returnString? name;print(name ?? 'Unknown'); // 'Unknown' 출력name = 'John'..

Dart 2024.10.16

(Dart) Named Parameters

Named Parameters인자의 이름을 명시해서 값을 전달하는 방식으로 인자의 순서에 구애받지 않고 이름을 지정하여 값을 전달할 수 있기 때문에 가독성이 높아지고 선택적으로 인자를 전달할 수 있게 한다. (조건)- named argument 를 사용하기 위해서 parameter 리스트를 가지게 해야 함.ex) sayHello({String name, int age, String country,}) { }- null 값이 전달되고 해당 값을 참조하게 될 것을 Dart가 우려하기 때문에 매개변수의 기본값을 넣어줘야 함 (null 참조 방지)  null safety 방지 방법 2가지 1. default value를 줘서 방지하는 방법String sayHello({ String name = 'anon', ..

Dart 2024.10.16

(Dart) Dart의 특징에 대해 알아보자

DartDart는 구글이 개발한 프로그래밍 언어로 Flutter 프레임워크와 함께 모바일, 웹, 데스크탑 애플리케이션 개발에 널리 사용된다. (이러한 특징 때문에 Android/ios 를 동시에 개발하기 위해 Dart 공부를 시작했다!) 이것 외에도 다른 특징들이 있으니 알아보자. JIT (Just-in-Time) & AOT (Ahead-of-Time) 컴파일Null Safetyflutter & Dart 모두 구글에서 개발JIT (Just-in-Time) & AOT (Ahead-of-Time) 컴파일먼저 Dart 는 두 가지 컴파일 방식을 가지고 있다 AOT 방식은 우리에게 익숙한 방식으로 컴파일을 먼저 하고 그 결과인 바이너리를 배포하는 방식이다. 언어로 예를 들면 C/C++ 가 있다. UI 작업을 진..

Dart 2024.10.07

(Dart) final, late, const 키워드를 사용하여 변수 생성하기

저번에는 null safety 에 대해 알아보았다. 이번에는 final, late, const 키워드를 사용하여 변수를 생성하는 방법과 해당 키워드가 가진 기능에 대해 알아보도록 하자. Final먼저 final 에 대해 알아보자. 해당 키워드는 변수를 생성하고 최초로 준 값 이후에는 값을 수정할 수 없도록 하는 기능이 있다. 그렇기 때문에 변수의 값을 바꿀 수 없게 고정하고 싶다면 사용하면 된다. void main() { final name = '돗개진'; name = 'las'; // Error : The final variable '돗개진' can only be set once.} 위 코드를 확인해 보면 name 이라는 변수를 final 키워드를 사용해 생성한 뒤 해당 변수에 다른 값을 넣..

Dart 2024.10.06

(Dart) null safety 와 nullable 변수

이번엔 Dart 언어의 특징인 null safety 에 대해서 알아보도록 하자. kotlin 에서도 마찬가지로 개발자가 null 을 참조하는 것을 막아주는 기능을 제공하는데 해당 기능은 매우 중요하다. 왜냐하면 null 을 참조하게 될 경우 런타임 에러가 발생하게 되는데 이 에러는 앱을 사용하던 중에 발생하는 에러로 사용자가 해당 에러를 접하게 되기 때문이다. 따라서 컴파일 전에 해당 에러를 잡아내는 것이 이상적이다. 그렇다면 어떻게 해야 null 참조를 방지할 수 있으며 null 이 필요할 경우엔 어떤 방법으로 사용할 수 있을지 알아보도록 하자. void main() { String name = '돗개진'; name = null; // Error : null can't be assign..

Dart 2024.10.06

(Dart) var, dynamic 키워드

앞으로 flutter로 앱 개발을 하기 위해 필요한 Dart 언어를 공부해 볼 것이다. 먼저 var 와 dynamic 키워드를 사용하여 변수를 선언할 때 어떤 차이점과 기능이 있는지 알아보자 Var var 키워드는 타입을 지정하지 않고 Dart 가 타입을 추론할 수 있도록 변수를 생성하는 것이다. dart 스타일 가이드에 따르면 var를 가능한 한 많이 사용하는 것을 권장하고 있다.void main() { // var name = '멍멍'; // var 자리에 String 과 같이 타입을 직접 선언 가능 name = '슬슬'; // 선언한 변수는 값을 변수 선언 후에 바꿀 수 있음 } 위와 같이 var 키워드를 사용해서 타입 추론을 통해 변수를 사용해도 되지만 타입을 지정하고 싶을 경우에는 va..

Dart 2024.10.06

(Android) Repository Pattern 의 이해

Repository Pattern: Data Layer 를 앱의 나머지 부분에서 분리하는 디자인 패턴, Data Layer 는 UI 와 별도로 앱의 데이터와 비지니스 로직을 처리하는 레이어이다. 다른 레이어는 Data Layer 에서 제공하는 API 를 통해서 데이터에 엑세스가 가능하다.   아래 그림은 안드로이드에서 권장하는 아키텍처이다. 아래 다이어그램에선 아키텍처의 Activity / Fragment (= UI Layer) 가 직접 Data 에 접근하지 않고 Repsitory 를 통하여 데이터를 가지고 오는 것을 볼 수 있다.  해당 그림은 안드로이드에서 권장하는 아키텍처이다. 다이어그램의 순서를 살펴보면 아키텍처의 Activity / Fragment 와 같은 UI 레이어에서 직접 Data 에 접근..

Android 2024.10.01