코드 성능과 튜닝 매개 변수에 대해 오랫동안 읽었으며 실제로 Android 프로그램이 내 초점 중 하나입니다.
먼저 솔루션에 도달하는 데 도움이되는 기본 또는 가장 중요한 개념을 소개하겠습니다.
으로 안드로이드 개발자는 주장했다
모듈은 독립적으로 구축, 테스트 및 디버깅 가능
따라서 모듈에는 자체 Gradle & Dependencies 가 있으며 프로젝트에서 탐색 할 수 있습니다 Hierarchy Viewer
.
사실, 모듈화 는 유지 관리 문제를 강조합니다 . 성능 문제와 달리 모듈화는 다음과 같은 중요한 영향을 미칩니다.
다음은 명확하게하기 위해 플롯 한 다이어그램입니다. 알 수 있듯이 이산 모듈을 사용하는 동안 메소드 A를 호출하기 위해 이산 모듈 2N micro secs
이 N micro secs
없는 것과 비교됩니다 .
이 질문은 참조 된 메소드가 상속 깊이와 관련된 것을 계산 한다고 생각합니다 .
대답은 다음과 같습니다. 모듈화를 사용하면 Referenced Methods가 증가하지만 실제로는 앱 성능에 영향을 미치지 않으며 가능한 주요 문제는 대부분의 경우 무시할 수 있는 상속 깊이입니다 .
모듈화에서 증가 된 참조 방법은 각 모듈 Gradle & Dependencies로 인한 것임을 강조합니다.
앱 모듈화가 어떻게 참조 된 메소드 수를 크게 높일 수 있습니까?
APK 분석기에 중요한 영향을 미치는 조건 참조 방법
또한 축소 및 코드 축소는 소스 코드를 컴파일 한 후 DEX 파일의 내용을 각각 변경할 수도 있습니다.
위의 공식 진술 외에도 다음과 같은 APK 분석기에 영향을 미치는 다른 조건을 추가하고 싶습니다.
개발자가 모듈화 경험이 어느 정도입니까?
모듈화는 건축 (개발자) 이 부엌이 있어야하는 곳과 휴게실이 있어야하는 곳, 화장실이 있어야하는 곳을 정의 하는 집과 같습니다 .
아키텍처가 WC와 주방을 결합하기로 결정하면 어떻게됩니까? 예, 이것은 재앙입니다.
개발자가 경험이 많지 않으면 모듈화하는 동안 발생할 수 있습니다.
추가 정보 외에 OP 질문에 대한 답변
여기 나는 의견에서 op 질문에 대답합니다.
별도의 Gradle이 참조 된 메소드 수에 추가되는 이유는 무엇입니까? 그리고 별도의 의존성에 대해 최종 결과가 단일 APK 인 경우 'app'의 중복 종속성이 없으며 기능 모듈이 참조 된 메소드 수에 추가 될 것이라고 생각합니다.
모듈은 빌드, 테스트 및 디버깅 할 수 있으므로 반드시 고유 한 Gradle & Dependencies를 가져야합니다.
멀티 모듈 프로젝트가 준수되는 동안 컴파일러는 .dex
다음을 포함한 여러 파일을 생성 합니다.
.dex
전체 통합 종속성 파일
- 모듈
.dex
들
종속성 .dex
파일은 모든 모듈 gradles 의 통합입니다
모듈 gradle이 최종 Referenced Mothods Count에 어떤 영향을 미치는지 살펴 봅시다!
결과는 같지만 참조 방법 수에는 차이 가있는 2 APK
초가 있습니다.
둘 다 비어있는 활동 1.7k
이며 참조 방법 수에 차이가 있으며 기능에 따라 다릅니다. 주요 차이점은 모듈의 Gradle에 있으며 그중 하나는
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
다른 하나는
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
}
그것들은 단지 빈 활동이지만 Gradle의 최소한의 차이로 인해 1.7k
Referenced Method Counts의 차이가 발생 했습니다.
그리고 App Gradle은
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation project(path: ':module')
}
주요 관심사는 Apk Analyzer에서 개별적으로 참조 된 분석법 수의 추가가 총 참조 된 분석법 수와 다른 이유는 무엇입니까?
이것은 다른 IDE 필터 일뿐입니다. .dex
파일을 선택하는 경우 참조 방법 카운트는 각 행의 참조 된 방법 카운트의 SUM과 같지만 .dex
파일 을 다중 선택 하는 경우 분석기가 선호하는 참조의 동등성으로 인해 SUM과 실제 개수의 차이를 볼 수 있습니다. 그들을 필터링합니다.
스크린 샷에서 여러 .dex
파일을 선택한 다음 분석기 필터 평등을 선택했습니다.
우리 프로젝트에서 우리는 centralized dependencies.gradle 파일을 사용하므로 버전이 다를 가능성이 없습니다. 따라서 기능 모듈에 동일한 / 정확한 종속성 세트와 해당 버전이 있어도 참조 된 메소드 수가 증가 할 것이라고 생각하십니까?
이론적으로 참조 된 메소드 수를 증가 시키지 않아야 합니다. 그러나 내가 설명했듯이 개발자 경험은 최종 결과에 큰 영향을 미칩니다.
팀 분석기 는 출시 전에 성능 문제를 확인하고 수정해야합니다.
- 규칙을 지키다
- 축소 및 축소 된 리소스
- androidManifest.xml
- gradle 설정
이제 개발자 경험 및 코드 유지 관리가 최종 결과에 어떤 영향을 미치는지 명확히하고 싶습니다 . APK가 중앙 집중식 종속성을 사용하는 경우에도
위의 예에서, i'v 증가 5.1k
개수 참조 된 방법으로 하더라도 내가 가진 중앙 종속 !!!!!
어떻게 가능?
답은 : 프로젝트의 디렉토리에 쓸모없고 숨겨진 .jar
파일을 추가했습니다 libs
. 당신이 볼 수 있듯이 쉽게 나는 최종 결과에 영향을 미쳤다.
당신이 볼 수 있듯이 개발자 경험을 최종 result.as에게 결과에 영향을 미치는, 실질적으로 그것을 참조하는 방법 카운트 만 증가 될 가능성이 있습니다 이론적으로 해야 하지 .
그리고 병렬 컴파일을 비활성화하여 'app'모듈 만 컴파일 할 때 참조 된 메소드 수에 차이가없는 이유는 무엇입니까? 'app'모듈의 의존성 만 사용 되었기 때문에 줄어들었을 것입니다.
컴파일은 참조 된 메소드와 아무런 관련이 없습니다. counts.it는 개발자가 준수하고자하는 것을 준수합니다.
결론
이 문제와 관련된 모든 가능성을 다뤘습니다. 실제로 다른 상황에서 발생할 수 있으며 개발자는이 지침을 사용하여 문제를 해결할 수 있습니다.
- 참조 된 방법이 증가한 이유와 경우에 따라 크게 증가하는 이유를 발견했으면합니다.
- 모듈에는 Gradle & Dependencies와 모듈화로 모듈이 증가합니다. 따라서 이러한 방법 참조.
- 모듈화는 실제로 무시할 수없는 앱 성능에 영향을 주지만 앱 유지 관리 수준을 크게 향상시킵니다.
- 모듈화에 대한 개발자 경험 또한 최종 결과에 큰 영향을 미칩니다.
중요 사항 : 거의 모든 진술은 나의 조사 및 연구입니다. 실제로 오류와 결함이있을 수 있으며 향후 더 많은 정보를 추가하기 위해 업데이트 될 예정입니다.