안녕하세요 여러분, 저는 안드로이드 소스 코드와 바이너리 각각의 컴파일과 디컴파일에 대해 전문가들과 논의하고 싶습니다. 장치에서 실행되는 Android OS를 디컴파일하고 소스 코드를 가져와 장치 드라이버와 같은 유용한 항목을 추출하고 나중에 이를 사용하여 동일한 장치(이미지)에 설치할 수 있는 다른 바이너리를 컴파일할 수도 있습니까? 하지만 편집된 소스를 사용합니다.
예를 들어, Android 2.3.3이 설치된 Samsung AAAA가 있고 잘 작동합니다. Android 4.0.4가 있었으면 좋겠습니다. 현재 가지고 있는 이미지(2.3.3)를 소스(2.3.3)로 디컴파일할 수 있습니다. 드라이버 또는 기타 소스 요소를 4.0.4의 소스 코드 조각과 연결하고 새 이미지(2.3.3의 일부 드라이버와 4.0.4의 일부 소스 코드가 포함된 바이너리)를 생성한 다음 해당 이미지를 사용하여 플래시합니다. 장치 삼성 AAAA.
많은 도움이 가능할까요? 감사합니다.
답변1
예, 아니오.
예, (보통) 이전 소스 코드를 가져와 새 소스 코드와 결합할 수 있습니다. 이는 예를 들어시아노 모듈(무엇보다도) 하고 있습니다.
아니요, 빌드된 이미지를 디컴파일하고, 소스 코드를 추출하고, 이러한 내용을 그대로 새 소스 코드에 넣고 다시 컴파일할 수 없습니다. 주로 다음과 같은 여러 가지 이유로 상황이 그렇게 간단하지 않습니다.
디컴파일은 컴파일의 역과정이 아닙니다. 코드 작업의 일반적인 방법은 소스 코드를 컴파일하고 이를 실행 파일(또는 라이브러리)에 연결하는 것입니다. UNIX 시스템에서는 일반적으로매우 낮은 주파수요즘 보관됨). 디컴파일은 원본 소스 코드(추가 데이터 없이)를 재현할 수 없으며 대신 바이너리에 있는 식별자를 사용하는 어셈블리 코드로 끝납니다. C 용어로 대략적으로 말하자면, 내보낸 개체가 무엇이든 이름은 올바르게 지정되지만
static
개체는 그렇지 않습니다. 컴파일러(또는 링커인 경우저온 산화이미지를 빌드할 때 사용되는)은 함수 내의 일반 명령문 부분에서 식별할 수 없는 코드 블록일 뿐입니다.API 호환성. 커널 장치 드라이버의 원본 소스 코드를 사용하더라도 이를 사용하여 아무런 변경 없이 최신 커널에서 컴파일할 수 있다는 보장은 없습니다. 내부 커널 구조는 특히 초기 Android 커널이 크게 패치되었기 때문에 변경될 수 있습니다(즉, 일반 트리와 매우 다름).
즉, 불가능하지는 않습니다. 우선 CM(CyanogenMod) 및 기타 대체 ROM을 확인하십시오. 동일한 문제가 발생한 첫 번째 사람이 아닐 수도 있습니다. 그래도 작동하지 않고 충분히 능력이 있거나 되고 싶다면 장치에 대한 원본 커널 소스 코드를 구하는 것이 좋습니다.~ 해야 하다어딘가에서 액세스할 수 있으며 그렇지 않은 경우 회사는 불편한 소송을 당할 위험이 있습니다) 해당 커널과 최신 Android 커널을 출발점으로 사용합니다. 또한 대체 ROM 커뮤니티 또는안드로이드 SE여기보다 더 구체적인 질문을 하기에 더 좋은 곳이 될 것입니다.