ROM을 수정하는 것은 대체로 다음 세 가지로 나눌 수 있습니다: 간소화, 보충, 미화 여기서는 주로 간소화와 보충 두 가지 측면을 논의하며, 미화에 대해서는 다른 게시물을 참고하시면 됩니다.
1. 먼저 ROM에는 어떤 것이 있는지 살펴보겠습니다: WinRAR로 플래싱 패키지를 열면 몇 개의 디렉토리를 볼 수 있으며, 아래는 우리와 관련된 주요 디렉토리와 설명입니다.
dev_data/apps/ : 시스템 프로그램의 apk 파일 디렉토리, 플래싱 후 "/data/app_s/"에 해당합니다. 여기의 프로그램은 플래싱 후 제거할 수 없습니다.
dev_data/app/ : 사용자 프로그램의 apk 파일 디렉토리, 플래싱 후 "/data/app/"에 해당합니다. 여기의 프로그램은 플래싱 후 제거할 수 있습니다.(10월 28일 이후 버전부터 제공되며, 이전 버전은 사용자가 직접 이 디렉토리를 추가할 수 있습니다)
META-INF/com/google/android/ : 플래싱 스크립트 파일
system/etc/: 일부 설정 파일 저장소
system/etc/permissions/ : 소프트웨어 권한과 관련된 디렉토리, 일부 패치는 이 디렉토리에 파일을 추가해야 합니다.
system/lib/ : 시스템 프로그램의 라이브러리 파일 저장 위치
2. 다음으로 플래싱 스크립트 파일을 알아봅시다: Recovery를 사용하여 플래싱할 때, 플래싱 과정은 스크립트 파일에 의해 제어됩니다. 스크립트 파일은 압축 파일 내 META-INF/com/google/android 디렉토리에 있는 update-script 파일이며, 텍스트 편집기로 열 수 있습니다. 스크립트 파일 중 우리가 관심을 가질 몇 가지 명령어는 다음과 같습니다.
(1) show_progress 0.1 0 : 진행 바 표시
플래싱 진행 바를 표시할 때 사용합니다. 앞의 0.1은 진행 바의 위치를 의미하며, 다른 값(1 미만)으로 변경할 수 있습니다. 뒤의 숫자의 의미는 정확히 알 수 없지만, 대체로 마지막 값을 제외하고는 모두 0이며, 마지막 값은 10입니다. 일부 ROM에서는 플래싱 완료 후에 진행 바가 절반 정도만 나타나는 경우가 있으므로, 마지막 문장을 show_progress 0.8 10으로 변경하면 진행 바가 끝까지 표시됩니다.(2) 몇 가지 키워드 (A) "SYSTEM:"은 플래싱 후 시스템 디렉토리 = "/system/" 을 나타냄 (B) "INTERNAL:"은 플래싱 후 /data 디렉토리 = "/data/" 을 나타냄 (C) "PACKAGE:"는 압축 파일의 루트 디렉토리를 나타냄. 예를 들어 "SYSTEM:etc/"는 플래싱 후 "/system/etc/" 디렉토리와 같고, "PACKAGE:dev_data"는 압축 파일 내의 dev_data 디렉토리와 같음 (3) copy_dir PACKAGE:dev_data INTERNAL: copy_dir는 디렉토리를 복사할 때 사용되며, 첫 번째 매개변수는 복사할 디렉토리, 두 번째 매개변수는 복사할 위치임. 예를 들어 copy_dir PACKAGE:dev_data INTERNAL:는 ROM 압축 파일의 dev_data 디렉토리 내용을 플래싱 후 "/data/" 디렉토리에 복사하는 용도임 (4) set_perm_recursive 0 2000 0755 0755 SYSTEM:bin 디렉토리나 파일 권한을 설정할 때 사용하며, 사용 방법은 리눅스에서 권한 설정하는 방법과 유사함 (5) delete SYSTEM:app/YouTube.apk 파일을 삭제할 때 사용하며, 일반적으로 잘 사용되지 않음. 삭제하려면 그냥 지우면 됨. 좋아요, 이제 시스템 프로그램을 줄이거나 추가할 수 있음 Ⅱ. 시스템 프로그램 줄이기 '줄이기'란 실제로는 시스템 프로그램을 삭제하는 것을 의미하며, 우리가 사용하지 않는 프로그램은 삭제할 수 있음. 이러한 프로그램을 삭제하는 장점은 (1) 일부 프로그램은 우리가 사용하지 않아 프로그램 목록에 표시되면 번거로운데, 이런 프로그램이 많으면 프로그램 목록을 여는 속도가 느려질 수 있음 (2) 일부 프로그램은 실행 후 메모리를 차지하지만 우리가 사용하지 않음. 예: 문자 필터링 등 (3) 원 ROM에 있는 일부 프로그램을 사용하고 싶지 않거나 다른 프로그램으로 바꾸고 싶은 경우가 있음. 예: ADW가 마음에 안 들면 LAUNCH PRO로 변경. 줄이는 방법은 아주 간단함: WinRAR로 ROM을 열고 dev_data apps에 들어가서 필요 없는 프로그램을 찾은 후 삭제함. 줄일 수 있는 프로그램: 이 문제는 많은 게시물에서 다루고 있어, 검색해 보면 됨. 예: 아래 몇 개 게시물 Ⅲ. 프로그램 추가 프로그램을 추가하는 방법은 두 가지가 있음. 하나는 프로그램을 시스템 프로그램으로 추가하는 것이고, 두 번째는 사용자 프로그램으로 추가하는 것임. 프로그램을 시스템 프로그램으로 추가하는 장점은 실행 속도가 빠름(다들 그렇게 말함, 나는 체감하지 못했음), 단점은 직접 제거할 수 없고, RE 등의 도구를 통해서만 삭제 가능함.사실 RE로 직접 시스템 프로그램 APK 파일을 삭제할 때 꼭 모두 완전히 제거되는 것은 아니다. 믿지 않으면 /data/data/ 이 디렉토리를 확인해 보라. 모든 프로그램마다 하나의 목표가 대응되어 있고, 그 디렉토리 이름은 프로그램 패키지 이름과 같다(XXX.APK의 XXX가 아님).
1. 시스템 프로그램 추가: 시스템 프로그램을 추가하는 가장 간단한 방법은 다음과 같다:
(1) WinRAR로 ROM 압축 파일을 열고 "dev_data app_s" 디렉토리로 들어가서 추가할 프로그램의 APK 파일을 그곳에 복사한다.
(2) WinRAR로 추가하려는 APK 파일을 열어 "lib/armeabi" 디렉토리에 .so로 끝나는 파일이 있는지 확인한다. 이 파일들은 프로그램 실행 시 필요한 라이브러리 파일이며, 있다면 압축 파일 내 "system/lib/" 디렉토리에 복사한다. 일부 사용자는 ROM 수정 시 추가한 프로그램이 실행되지 않는 경우가 있는데, 대부분 이 경우에 해당한다. 예를 들어, 최신 버전 구글 중국어 입력기 등이다.
2. 사용자 프로그램 추가: 사용자 프로그램 추가는 약간 번거롭지만, 플래싱 후 바로 삭제할 수 있다. 10월 28일 이후의 ROM을 사용한다면 APK를 "dev_data/app/" 디렉토리로 직접 끌어다 놓으면 된다. 이 단계는 매우 간단하며, 번거로운 부분은 APK 안에 라이브러리 파일이 있는 경우이다. 간단히 처리하는 방법은 시스템 프로그램 추가 시 2단계 방법과 같다. 이 방법의 단점은 제거 시 라이브러리 파일이 "system/lib/"에 남는다는 것이다. 하지만 대부분의 프로그램은 라이브러리 파일이 없고, 일부 프로그램에서 남은 라이브러리 파일도 큰 문제는 없다. 조금 더 고급 방법은 스크립트를 작성하여 설치하는 것이다.
10월 28일 이전 ROM은 "dev_data/"에 app 디렉토리가 없으므로, 직접 생성할 수 있다(WinRAR에서 마우스 오른쪽 클릭 후 새 폴더 생성). 디렉토리를 만든 후 플래싱 스크립트에서 디렉토리 속성을 설정해야 한다: 플래싱 스크립트에서 다음 부분을 찾는다:
copy_dir PACKAGE:dev_data INTERNAL:
set_perm 1000 1000 0771 INTERNAL:app_s
그 뒤에 다음 문장을 추가한다:
set_perm 1000 1000 0771 INTERNAL:app
첫 번째 문장은 ROM의 dev_data 디렉토리 내 모든 내용을 /data 디렉토리로 복사하는 것이고, 두 번째 문장은 app_s의 권한을 설정하는 것이다. 우리가 추가한 문장은 app의 권한을 설정하는 것이다.
다음으로 ROM을 수정하고 조정할 수 있다. 다음으로 ROM을 수정하고 조정할 수 있다.
4.firstboot 스크립트는 ROM에 대해 고급 설정을 할 수 있으며, firstboot.sh 스크립트를 이용할 수 있습니다. firstboot.sh 스크립트는 ROM의 dev_data 디렉토리에 있습니다. 스크립트의 코드는 기기를 처음 부팅할 때 실행되며, 이를 이용하여 시스템 설정이나 APK 설치 등의 작업을 할 수 있습니다. liudidi1028rom의 스크립트 일부를 살펴보면 # System default settings /system/xbin/sqlite3 "INSERT INTO system (name, value) VALUES ('trackball_wake_screen', 1);" /system/xbin/sqlite3 "INSERT INTO system (name, value) VALUES ('trackball_unlock_screen', 1);" /system/xbin/sqlite3 "INSERT INTO system (name, value) VALUES ('lock_home_in_memory', 1);" 아마 이 세 줄 코드의 기능은 쉽게 추측할 수 있을 것입니다. 스크립트가 이렇게 작성된 이유는 저에게 묻지 마세요, 저도 잘 모르기 때문에, 모두 함께 연구하면 됩니다. 스크립트에서는 rm, mv 등의 명령어를 사용할 수 있으며, 이를 통해 특정 설정 파일을 바로 덮어쓸 수 있습니다. 예: busybox rm /system/etc/파일명 busybox mv /system/etc/파일명 물론, 시스템 파일을 수정하려면 먼저 권한을 얻어야 합니다: busybox mount -o remount,rw /system 그 후 읽기 전용으로 변경: busybox mount -o remount,ro /system firstboot.sh는 매우 유용하며, 누군가가 초급 튜토리얼을 작성해주면 좋겠습니다!