Android Nougat용 공식 Xposed 프레임워크 출시

오랜 기다림 끝에 Xposed Framework 개발자는 이제 프로젝트가 Android Nougat를 지원한다고 공식적으로 발표했습니다. 지금 Xposed 모듈을 설치하세요!

Android 생태계가 수년에 걸쳐 성숙해짐에 따라 기기를 루팅해야 하는 이유를 찾는 사용자가 점점 줄어들고 있습니다. 경험이 만족스럽거나 게임을 플레이하고 싶지 않기 때문에 기본 펌웨어를 유지하는 사용자가 늘어나는 추세입니다. Google SafetyNet API를 사용한 고양이와 쥐 게임. 하지만 2016년 초에 사용자에게 휴대폰을 루팅한 이유를 묻는다면 아마도 가장 큰 이유는 루팅을 하기 위함이었을 것입니다. Xposed 프레임워크 설치. 그랬어요 Android 7.0 Nougat 이후 1년 이상 처음 출시되었지만 오랜 기다림이 마침내 끝났습니다. Android Nougat용 공식 Xposed Framework가 드디어 출시되었습니다.

지난 한 해 동안 XDA 수석 인정 개발자 rovo89Xposed Framework의 수석 개발자인 가 제공했습니다. 여러 개의업데이트 Android Nougat용 Xposed Framework의 진행 상황에 대해 알아보세요. 일부의 경우, 기다림은 참을 수 있었다 주로 Xposed Framework가 제공하는 수많은 추가 기능 때문입니다. 안드로이드 마시멜로. 그러나 많은 사람들은 자신의 기기에 Xposed가 없는 삶을 살고 있습니다.

우리는 개발자 abforce가 AOSP 7.1.2용 ART 하위 모듈하지만 GermainZ가 지적했듯이 공식 Xposed Framework를 기다리는 것이 더 나을 것입니다 abforce의 구현을 위해서는 프레임워크를 사용자 정의 ROM에 통합해야 했기 때문에 릴리스되었습니다. 뿐만 아니라, 이 비공식 구현은 불완전하여 특정 Xposed에서 일관성이 없거나 버그가 있는 동작이 발생했습니다. 모듈.

abforce는 그의 비공식 Xposed가 Android 7.1 Nougat에서 작동하도록 하는 데 큰 역할을 했지만 그의 구현은 반대였습니다. Xposed에 대한 rovo89의 비전은 사용자와 개발자에게 안정적이고 사용하기 쉬운 계약을 제공하는 안정적인 솔루션이어야 한다는 것입니다. 서로 같은. 이것이 의미하는 바는 모듈이 사용자에게 문제 없이 작동해야 할 뿐만 아니라 모듈이 설정되는 방식도 마찬가지라는 것입니다. up은 사용자들 사이에서 일관성을 유지해야 개발자가 Xposed 모듈이 앱에 대한 책임이 있는지 여부를 알 수 있습니다. 충돌.

더 이상 rovo89와 같은 문제에 대해 걱정할 필요가 없습니다(XDA Recognized Developer의 도움을 받은 후). 와남)는 이제 Xposed Framework 및 Installer에 대한 공식 업데이트를 출시할 준비가 되었습니다. Android 7.0/7.1 Nougat과의 호환성. 즉, 사용자 정의 ROM을 설치하거나 불안정한 버전을 깜박이게 만들 필요가 없다는 의미입니다. Xposed를 즐기세요. 휴대폰을 루팅하고 최신 Xposed Installer 애플리케이션(아래 링크)을 설치하세요. 그만큼 Xposed Installer가 Xposed를 설치하는 마법을 수행해 드립니다..

모듈 저장소를 탐색하는 Xposed 설치 프로그램

특히 이번 릴리스가 출시되었기 때문에 일부 사람들에게는 다소 늦은 것처럼 보일 수 있습니다. 안드로이드 8.0 오레오가 출시된 지 한 달여 만에. 앞으로 몇 달 동안 Android Oreo의 안정적인 버전에 액세스할 수 있는 기기는 거의 없다는 점을 명심하세요. 안드로이드 오레오는 오직 0.2% 모든 Android 기기 중 (Nougat의 약 18%와 비교) Google의 최신 통계에 따르면 많은 사용자는 최첨단 상태를 유지하기 위해 맞춤형 ROM을 설치하는 것을 좋아합니다.

2017년 10월 기준 안드로이드 버전 분포. 원천: Google

비록 설치하더라도 Android 8.0의 비공식 포트 포럼의 수많은 장치에서 사용할 수 있는 포트 중 다수는 일일 드라이버 상태가 아닙니다. 따라서 새 제품을 구입하기 위해 수백 달러를 기꺼이 지불하지 않는 한 구글 픽셀 2/2 XL, 소니 엑스페리아 XZ1/XZ1 컴팩트, 또는 다음과 같은 곧 출시될 장치 화웨이 메이트 10, 그러면 Android Nougat의 Xposed Framework를 몇 달 동안 사용할 수 있을 것입니다.

귀하에게 해당된다면 Xposed Installer 및 프레임워크 zip에 대한 공식 포럼 스레드로 이동하여 Android Nougat 장치에서 이를 설치하고 실행하십시오.

Xposed Installer v3.1.2 다운로드(첨부파일)

Nougat 7.0(SDK24)용 Xposed 설치 프로그램 다운로드

Nougat 7.1(SDK25)용 Xposed 설치 프로그램 다운로드

Xposed Framework의 용도나 작동 방식에 대해 잘 알지 못하는 많은 신규 사용자를 위해 우리는 아래에서 Xposed Framework에 대해 간략하게 설명하고 왜 기대해야 하는지, 개발이 이렇게 오래 걸리는 이유를 설명합니다. 했다.


Xposed Framework를 설치하는 이유는 무엇입니까?

맞춤형 ROM을 플래시하지 않고 맞춤형 ROM 기능을 얻고 싶으십니까? ROM을 조정하기 위한 모든 Xposed 모듈의 어머니입니다. 중력상자, 다 다루셨나요? 앱별로 디스플레이 설정을 맞춤설정하고 싶으신가요? 노력하다 앱 설정. 다음과 같은 특정 애플리케이션을 사용자 정의하는 것은 어떻습니까? 행아웃? 또는 Instagram을 수정하여 다음을 수행할 수 있습니다. 마음에 드는 게시물을 다운로드하세요.?

Xposed는 개발자에게 다음과 같은 기능을 제공합니다. 그들이 원하는 것은 무엇이든 거의 수정—주로 개별 애플리케이션을 대상으로 하지만 시스템 전체 기능도 수정할 수 있습니다. 우리가 나열한 사례는 빙산의 일각에 불과합니다. 추가할 수 있는 추가 기능이나 수정할 수 있는 앱의 수는 엄청납니다. 공식 Xposed 모듈 저장소 직접 확인해보세요. 이 새 릴리스와 Nougat 지원을 위해 일부 모듈을 업데이트해야 할 수도 있으므로 Nougat ROM에 설치하기 전에 반드시 확인하십시오!

Xposed 모듈은 어떻게 작동하나요?

그것의 요점은 Xposed Framework가 모듈을 허용한다는 것입니다. 모든 애플리케이션의 Java 메소드에 "후크"—사용자가 설치한 것이든 시스템 응용 프로그램이든 상관없습니다. Xposed를 사용하면 모듈이 자체 메서드를 실행할 수 있습니다. 이전, 도중 또는 대신 대상 애플리케이션의 원래 메소드.

예를 들어, 새 이메일에 대한 알림을 게시하는 Gmail 애플리케이션에서 사용되는 방법을 상상해 보세요. 기본적으로 이 메소드는 이메일을 보관/삭제하거나 회신하는 버튼이 있는 새 알림을 생성합니다. Xposed 모듈을 이 메소드에 연결하고 "읽은 상태로 표시"와 같은 새 버튼을 추가하도록 만들 수 있습니다. (네, 있어요 이미 해당 모듈이 있습니다.)

위의 내용은 Xposed Framework가 해당 모듈에서 수행할 수 있는 작업의 최종 결과를 지나치게 단순화한 것입니다. 프레임워크 자체는 믿을 수 없을 정도로 복잡하고 사용자 정의 ROM이 필요 없이 루팅된 장치에서 거의 보편적으로 작동하도록 만드는 것이 Android Nougat용 Xposed를 완료하는 데 오랜 시간이 걸린 이유입니다.

Xposed 개발이 왜 그렇게 오래 걸리나요?

모듈이 다른 앱의 메소드에 연결할 수 있게 해주는 Xposed의 이면에 있는 마법은 Zygote와 안드로이드 런타임 (ART)가 작동합니다. 이러한 요구 사항으로 인해 이미 많은 사람들이 프로젝트에 참여하는 것이 불가능해졌지만, 문제는 다음과 같은 사실로 인해 더욱 악화됩니다. rovo89는 지난 5년 동안 Xposed의 주요 기여자였습니다..

그렇기 때문에 Xposed의 마지막 공개 릴리스 이후 Xposed에 대한 수정 사항을 오픈 소스화하라는 요청이 거부되었습니다. 그것은 그의 아이디어이고 그것을 이해하고 수정하는 데 가장 능숙하므로 늦은 단계에서 프로젝트에 더 많은 인력을 추가합니다. 프로젝트를 더 지연시킬 수도 있습니다.

게다가 rovo89가 계속해서 소스를 업데이트한다면, 그는 걱정했다 누군가가 범용 Xposed 설치 프로그램 없이 반기능 Xposed 프레임워크를 구축하기 위해 미완성 코드를 가져갈 것이라고 생각합니다. (어쨌든 이 일은 abforce 구현에서 발생했으며 그 결과 다양한 설치 방법의 혼란으로 인해 rovo89의 망설임이 정당화되었습니다.)

따라서 우리가 할 수 있는 최선의 일은 rovo89에게 자신의 애완동물 프로젝트를 수행할 시간을 주는 것이었습니다. Xposed는 그의 정규직도 아니고 심지어 파트타임 직업도 아닙니다. 그것은 단지 취미일 뿐이며, 그가 5년 동안 지역 사회의 이익을 위해 해왔던 일입니다. Xposed만큼 복잡한 프로젝트에는 작업하고 테스트하는 데 시간이 필요합니다. 그는 다른 의무로 인해 자주 가지지 못한 시간입니다. 진전 ~였다 rovo89가 마침내 Xposed Framework 자체와 Xposed Installer가 모두 출시될 준비가 될 때까지 이 문제에 대한 몇 가지 공개 업데이트에 문서화한 것처럼 작년에 만들어졌습니다.

Xposed가 Nougat에서 작동하도록 rovo89는 무엇을 했나요?

Android의 새로운 릴리스에서는 때때로 ART 작동 방식이 변경되어 Xposed의 일부를 재작업해야 할 수도 있습니다. 예를 들어, Android 7.0 Nougat에서는 애플리케이션의 런타임 성능을 향상시키는 데 도움이 되는 ART용 Just-in-Time 컴파일러를 도입했습니다. 그러나 abforce의 비공식 Xposed Framework는 메소드 후킹이 올바르게 작동할 수 있도록 많은 ART 최적화를 비활성화합니다.

Android Nougat의 ART 최적화. 원천: Google

대조적으로, rovo89의 구현은 Android Nougat에서 모든 ART 최적화를 유지합니다. JIT를 사용하여 메서드 호출자를 다시 컴파일하고 여전히 메서드 후크를 유지합니다. 즉, ART 최적화를 강제로 비활성화하여 성능 저하 없이 Xposed 모듈의 이점을 누릴 수 있습니다.

rovo89가 Android Nougat용 Xposed에서 안정적인 후킹 방법을 최종적으로 달성하기 위해 수행한 작업에 대한 자세한 내용을 보려면 Rovo89가 제공한 아래 설명을 읽어 보시기 바랍니다.

rovo89의 전체 성명

Xposed의 핵심은 분명히 Java 메서드를 연결하는 기능입니다. 즉, 모듈이 이러한 메서드 전, 후 또는 대신에 코드를 실행하도록 합니다. 거의 모든 다른 기능이 이를 기반으로 하므로 항상 예상대로 작동하는 것이 중요합니다. 5년 전 Xposed를 발명한 이후 일반적인 개념은 동일했습니다. 이를 위해서는 메서드의 진입점을 변경해야 합니다. 실행 중에 진입점이 확인되지 않으면 실패하기 시작합니다. 이는 실제로 ART의 일부 최적화의 경우입니다.

한 가지 예는 컴파일 타임에 진입점이 이미 알려진 경우 호출자가 이 주소를 찾지 않고 직접 이 주소로 이동할 수 있다는 것입니다. 또 다른 예는 인라인입니다. 다음 예를 고려하십시오.

ART는twos() 메서드가 매우 간단하다는 것을 알아차릴 만큼 똑똑하므로 다음과 같이 doSomething() 메서드에 논리를 바로 포함합니다.

여전히 double() 메서드를 연결할 수 있지만 런타임 시 더 이상 doSomething()에서 호출되지 않으므로 콜백도 호출되지 않습니다. ART는 훨씬 더 영리합니다. 마법은 항상 42이므로 조건이 결코 충족될 수 없다는 것을 인식합니다. 따라서 전체 doSomething() 메소드는 실제로 작동하지 않습니다.

이전 버전에서는 Xposed가 이러한 최적화를 완전히 비활성화하고 모든 것을 강제로 재컴파일했습니다. 여기에는 몇 가지 단점이 있었습니다. 우선, ART 개발자들은 자신들의 기술로 성능을 극대화하는 데 환상적인 일을 하고 있습니다. 최적화를 비활성화하면 부분적으로 성능이 저하됩니다(얼마나 많은지 측정한 적이 없습니다). 그렇지만). 그러다가 재컴파일 자체가 늘 쉽지는 않고 특히 초반에는 머리가 많이 아팠습니다. 마지막으로 /system에 미리 컴파일된 파일 외에 다시 컴파일된 파일도 공간을 차지합니다.

Nougat의 비공식 버전도 이러한 최적화를 비활성화하지만 재컴파일을 강제로 수행하지는 않습니다(포트가 원래 ROM에 통합되도록 만들어졌기 때문입니다). 따라서 때로는 Hook이 실행되지 않을 수도 있습니다.

공식 버전을 사용하면 최적화된 코드를 유지하면서 여전히 안정적인 후크를 사용할 수 있습니다. 어떻게 작동하나요? 음, Xposed는 이루어진 모든 통화를 녹음합니다. 이는 APK가 컴파일되는 동안 또는 사전 최적화된 코드에 대한 별도의 패스에서 발생합니다. 이 추가 데이터는 많은 공간을 차지하지 않지만 Xposed가 특정 메서드가 인라인된 위치를 찾을 수 있도록 해줍니다. 따라서 메소드가 연결되면 모든 호출자가 최적화 해제됩니다. 즉, 해당 코드는 더 이상 사용되지 않습니다. 이렇게 하면 후크 콜백이 확실히 호출됩니다. 그리고 호출자가 과도하게 사용되는 경우 JIT로 간단히 다시 컴파일됩니다. 이번에는 메서드가 연결되어 있으므로 일부 최적화가 적용되지 않는다는 사실을 알고 있어야 합니다. 이는 후킹 방법의 효과가 최소한으로 감소함을 의미합니다. 이야!

이제 직접 사용해 보세요. 파일 기반 암호화를 지원하려면 구성 경로를 변경해야 하므로 Xposed Installer 3.1.2를 사용하십시오.

더 읽어보세요

결론

Android 7.X Nougat용 Xposed 출시에 대해 여러분도 많은 관심을 가져주시길 바랍니다. 기다림은 길었지만 Xposed의 복잡성을 고려하면 피할 수 없습니다. Xposed가 무엇인지, 어떻게 작동하는지 여전히 혼란스러워도 걱정하지 마세요. (우리를 포함하여) 실제로 그것이 어떻게 작동하는지 이해하는 사람은 거의 없습니다. rovo89와 같은 개발자는 작업을 패키징하는 데 최선을 다하므로 내부에서 무슨 일이 일어나고 있는지 실제로 이해할 필요가 없습니다.

Xposed Framework가 마음에 드시나요? 그가 하는 멋진 작업을 위해 rovo89에 기부하는 것을 고려해 보세요. 프로젝트에 기여할 자질이 있다고 생각한다면 아래 rovo89의 GitHub 페이지를 확인하세요.

rovo89에 기부하세요

Xposed에 기여

Xposed 모듈을 찾고 계십니까? Xposed Framework Module 하위 포럼을 확인하거나 XDA Labs 애플리케이션을 다운로드하고 Xposed 모듈 컬렉션을 찾아보세요.

Xposed 모듈 포럼

XDA 연구소 다운로드

안드로이드 오레오 진행

궁금하신 경우 Android Oreo용 Xposed를 얻는 과정은 다음과 같습니다.

저는 이미 Android 8.0 작업을 시작했습니다. 몇 가지가 있습니다 새로운 언어 기능 살펴봐야 하지만 일반적인 개념은 여전히 ​​작동해야 합니다. 여기에는 메소드가 연결될 때 모든 호출자의 컴파일된 코드를 무효화하는 모든 작업이 포함됩니다. 이는 제가 Nougat에서 작업할 때 가장 많은 시간이 걸렸습니다. 그래서 이번에는 훨씬 더 빨라질 것이라고 정말 확신합니다. 안드로이드 8.1크게 다르지 않아야 하므로 추가 작업이 많지 않을 것으로 예상됩니다.