Android Porting

markyang92·2021년 9월 9일
0

raspberrypi

목록 보기
1/4
post-thumbnail

개발환경

HW

  • Raspberry Pi 3 B+

  1. Raspberry Pi에서 Android OS 이미지를 지원하지 않는다.
    1-1. AOSP를 직접 빌드
    1-2. 빌드된 Android버전 사용

AOSP


코드명, 태그 및 빌드 번호

  • 사용 용도에 따라 코드명 버전 세부정보가 추가로 필요할 수 있음
    • flashboot 모드 부팅 시, 상응하는 'Android 기기 코드명' + '키 조합'
    • 커널 수동 빌드 시, '커널 소스' + '바이너리'를 가져오기 위한 '코드명' 및 '상응 위치'
    • Git 저장소를 제공하는 빌드에는 '소스'와 '빌드 도구'를 다운로드하기 위해 올바른 소스 디렉터리 설정을 가져오는 '기기 코드명 페어링'

Prerequisite

  • Ubuntu 18.04 (64-bit)
$ sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

Repo 설치


  1. $HOME/bin create
$ mkdir ~/bin

  1. PATH에 등록
    저자는 zsh를 사용하기 때문에, ~/.zshrc에 등록함 (근데 보통 ~/.profile 에서 $HOME/binPATH에 넣게 되어 있음)
# ~/.zshrc
PATH=~/bin:PATH

  1. Repo 다운
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# repo file은 python 파일임
$ chmod a+x ~/bin/repo

  1. 런처가 Google 서명과 일치하는지 확인
$ gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
$ curl https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ~/bin/repo

  1. AOSP 저장소 소스 코드 마스터 branch 초기화 한다. (나중에 원하는 manifest로 수정할 수 있음)
$ ~/bin/repo init -u https://android.googlesource.com/platform/manifest
$ ~/bin/repo sync -j8 # 오래걸림

AOSP 빌드


AOSP 빌드 참고 사이트

  1. AOSP 빌드를 위해서는 Android 버전의 Raspberry Pi Linux Kernel과 device driver등이 필요하다.
  2. android의 AOAP 버전을 빌드할 수 있는 방법과 소스는 아래의 Github 참고

Android nougat(7)

  1. peyo-hd의 https://github.com/peyo-hd/local_manifests/tree/nougat

repo 설치


  1. $HOME 디렉터리에 bin 디렉터리를 만들고 $PATH에 등록한다.
$ mkdir $HOME/bin

PATH는 자기가 쓰는 셸 설정 파일에 insert 할 것


Manifest 파일

  • 안드로이드 Project는 Manifest.xml을 가지는데, 이는 Android 빌드 도구, Android OS 및 App에 관한 정보를 포함한다.
  • Manifest는 다음과 같은 내용을 포함한다.
    • 앱이 요구하는 모든 사용자 권한
    • 앱이 어느 API를 사용하는지 근거로 앱에서 요구하는 최소 API 레벨 선언
    • 앱에서 요구하는 HW 및 SW 기능 선언
    • 앱이 링크되어야하는 API 라이브러리 선언, Android Framework API는 제외(e.g. Google Maps lib)
<?xml version="1.0" encoding="utf-8">
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="com.example.myapp">

    <!-- Beware that these values are overridden by the build.gradle file -->
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26 />

    <application
        android:allowBackup="true"> .... 중략
  • <application> 요소에서 android:icon 특성은 앱을 식별하는 아이콘에 대한 리소스를 가리킨다.
  • <activity> 요소에서는 android:name특성이 Activity 하위 클래스의 완전 정규화된 클래스 이름을 나타내며, android:label 특성은 액티비티의 사용자에게 표시되는 레이블로 사용할 문자열을 나타낸다.
    • <activity>: Activity
    • <service>: Service
    • <receiver>: Broadcast Receiver
    • <provider>: Content Provider

... Manifest 내용 출처: https://velog.io/@wlgy33/Manifest%EB%9E%80

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글