Android 앱을 기기에 업로드 할 수 없음 (오래된 dexed jar)
이 앱을 개발하기 위해 Android Studio를 사용하고 있으며, 오늘 테스트를 위해 기기에 업로드하려고 할 때 다음과 같은 팝업 창이 나타납니다.
기기에 현재 버전과 일치하지 않는 오래된 dexed jar가있을 수 있으므로 설치에 실패했습니다 (dexopt 오류). 계속하려면 기존 애플리케이션을 제거해야합니다.
경고 : 제거하면 응용 프로그램 데이터가 제거됩니다!
기존 애플리케이션을 제거 하시겠습니까?
확인 또는 취소의 두 가지 옵션이 있습니다. 확인을 누르면 실행 탭에 다음 메시지가 표시됩니다.
DEVICE SHELL COMMAND: pm uninstall my.bundle.id
Unknown failure
앱이 제거 된 것 같습니다. 애플리케이션 관리 아래에 흔적이 없습니다.
앱을 업로드 할 수 없습니다. 프로젝트를 청소하고 재건을 시도했지만 작동하지 않았습니다.
어떡해?
나는 또한 버전 2.0 Preview 6에서 2.0 Beta 3까지 Android Studio 에서이 문제가 발생했으며 여기에 언급 된 솔루션 중 어느 것도 나를 위해 일하지 않았습니다.
Instant Run과 관련이없는 것으로 나타났습니다. 내가해야 할 일은 다음 알림이 사라질 때까지 AVD의 내부 저장소를 늘리는 것뿐이었습니다. 또한 값을 변경 한 후 데이터 지우기를 수행해야했습니다.
이 프로젝트에서 Instant run을 비활성화했고 문제가 해결되었습니다.
Android 스튜디오 2.0 미리보기의 즉시 실행 기능의 버그 일 수 있습니다.
Instant Run 은 Android Studio 2.0에 도입 된 새로운 기능입니다.
추신 : 인스턴트 실행을 찾을 수없는 경우 다음 위치에 있습니다.
Android Studio --> Preferences --> Build, execution, deploy --> Instant run.
또는 기본 설정 탭에서 검색 할 수 있습니다.
AVD Manager로 이동 한 다음 기기의 작업 섹션에서 데이터 삭제를 선택합니다. 이것은 나를 위해 일했으며 도움이되기를 바랍니다 ....
64k 미만의 메서드가 포함되어 있지만 dex 파일이 버퍼보다 커지는 것을 발견했습니다. 그런 다음 ProGuard를 활성화하고 dex 파일 크기를 줄이는 데 많은 도움이되었습니다.
응용 프로그램 dex-method-counts 는 메서드 수뿐만 아니라 어떤 패키지가 속하는지 확인하여 dex 파일을 디버그하는 데 많은 도움이됩니다.
내 문제가 이전 SDK 빌드 도구 버전으로 인해 발생하여 Clean이 실패한다는 것을 알았습니다. SDK 빌드 도구를 최신 버전으로 업그레이드 한 후 청소가 완료된 후 더 이상 오래된 dexed jars 오류가 표시되지 않습니다. 이 문제로 어려움을 겪는 다른 사람에게 도움이되기를 바랍니다.
이것은 나를 위해 일했습니다.
Android Studio에서는 Build> Clean Project를 클릭하여 수행 할 수 있습니다 . Sysadmin 팁
dex 파일이 버퍼 크기보다 커지면 (즉, 65k 이상의 메서드가 포함됨)이 오류가 발생합니다. 다음 두 가지 방법으로이 오류를 피할 수 있습니다. 1.) ProGuard를 사용하여 사용하지 않는 코드 제거-ProGuard를 실행하도록 앱에 대한 ProGuard 설정을 구성하고 릴리스 빌드에 대해 축소를 활성화했는지 확인합니다. 축소를 사용 설정하면 사용하지 않는 코드를 APK와 함께 제공하지 않습니다.
2.) multidex 지원을 위해 앱을 구성 할 수 있습니다. 사용하려면 다음 링크를 참조 하세요 . https://developer.android.com/tools/building/multidex.html
multidex 지원을 위해 애플리케이션 클래스에서이 메서드를 재정의합니다.
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
다음과 같이 내 build.gradle을 수정하십시오.
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion 21
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
도움이 되었기를 바랍니다.
EDITS : 코드에서 텍스트 설명을 꺼 냈습니다.
내 프로젝트에서 나는 Google Play 서비스의 어느 부분과 연결했는지에 대해 더 구체적으로 설명함으로써이 문제를 극복했습니다. 특히 나는 변했다
dependencies {
...
compile 'com.google.android.gms:play-services:8.4.0'
}
...에
dependencies {
...
compile 'com.google.android.gms:play-services-maps:8.4.0'
}
in my app module's build.gradle, since all I was really using was the maps API.
What i did was modified build.gradle (Module:app) file.
Initially it was
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
I changed it to
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Then Rebuild and deploy !
In my case was because my emulator was full of apps. I saw how much space the emulator had and was almost nothing so I deleted some apps and with this my problem was resolved
If you're using Android studio 2.0 preview , disable the instant run .
All credit and thanks go for the life saver https://stackoverflow.com/a/34192979/1413998
This helped me for the emulator: Close Emulator. Tools > AVD Manager > Select Emulator Settings > Wipe Data > Cold Boot.. Now Install App.
None of answer didn't solve my problem
you should also make progaurd
for debug too. just add buildtypes
to your main gradle file:
buildTypes {
debug { // change release to debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
제 경우에는 "dictionary.txt"라는 파일로 인해 발생했습니다. 방금 삭제하고 문제를 해결했습니다.
나는 오늘이 문제에 직면했습니다. 해결책을 찾았습니다. 에뮬레이터의 공간이 얼마나되는지를 보았고 거의 아무것도 아니 었으므로 일부 앱을 삭제하고 문제가 해결되었습니다.
참조 URL : https://stackoverflow.com/questions/25493310/cant-upload-android-app-to-device-stale-dexed-jars
'IT박스' 카테고리의 다른 글
공백으로 경로를 입력하는 방법은 무엇입니까? (0) | 2020.12.15 |
---|---|
Spring @Scheduled 주석이 달린 메소드는 다른 스레드에서 실행됩니까? (0) | 2020.12.15 |
Newtonsoft.Json.Linq.JArray를 문자열 배열로 C # (0) | 2020.12.15 |
사용자 영역 프록시 시작 오류 : 0.0.0.0:80에 대한 바인딩 : 예기치 않은 오류 권한이 거부되었습니다. (0) | 2020.12.15 |
중첩 클래스에서 포함하는 클래스의 필드에 액세스하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.15 |