2011-10-04 4 views
0

내 응용 프로그램에서 일부보기를 부풀리기 위해 LayoutInflater.inflate (int resourceId, ViewGroup 그룹)를 사용하고 있습니다.난독 화 오류 - NoSuchMethodError : android.view.LayoutInflater.inflate

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-ignorewarnings 

-libraryjars ... 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class com.android.vending.licensing.ILicensingService 
-keep public class ... 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

내가 실현,이 라인에서 해당 응용 프로그램 충돌 :

setContentView(mLayoutInflator.inflate(mUiResources.getLayout(mUiResources.getIdentifier("main", "layout", mUiPackage)), null)); 
이 내 난독의 설정입니다

ERROR/AndroidRuntime(30511): java.lang.NoSuchMethodError: android.view.LayoutInflater.inflate 

: 나는 난독으로 난처 후 응용 프로그램을 실행할 때이 오류가있어

전체 그림 :

String mUiPackage = mSettings.getString(mResources.getString(R.string.ui_package), getPackageName()); 
try { 
    mUiResources = getPackageManager().getResourcesForApplication(mUiPackage); 
} catch (NameNotFoundException e) {} 

try { 
    mUiContext = getApplicationContext().createPackageContext(mUiPackage, Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); 
    mLayoutInflator = (LayoutInflater) mUiContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} catch (NameNotFoundException e) {} 
setContentView(mLayoutInflator.inflate(mUiResources.getLayout(mUiResources.getIdentifier("main", "layout", mUiPackage)), null)); 

문제가있는 문자열을

setContentView(R.layout.main); 

으로 변경했습니다. 하지만 첫 번째 사건이 필요해. 이 문제에 대한 해결책을 찾을 수 있도록 도와 주시겠습니까?

+0

android 도구로 자동 생성 된 cfg 파일을 사용하고 있습니까? –

+0

예. 내 libs에 대한 약간의 변경과 자동으로 생성 된 cfg 파일을 사용하고 일부 클래스는 공개 필드와 메서드를 유지하기 위해 – MistaGreen

+0

전체 게시물을 게시 할 수 있습니까? –

답변

0

대부분의 경우 문제는 옵션 -ignorewarnings으로 인해 발생합니다. 경고를보고 해결하도록 노력해야합니다. 필요한 경우 특정 클래스에 대해 -dontwarn을 지정하여 프로그램 실행 중에 실제로 사용되지 않았 음을 확신 할 수 있습니다.

0

그 proguard 구성은 안드로이드 SDK의 이전 버전으로 생성되었습니다. 빌드 도구의 최신 버전으로 업데이트하고 명령 줄에서 프로젝트 (IT에서의 AndroidManifest.xml와 DIR)의 루트 디렉토리로 이동하여 다음을 입력 :

android update project -p .

그것은 새로운를 생성해야을 proguard 설정 파일 - 당신은 "keepclasseswithmembernames"의 인스턴스가 "keepclasseswithmembers"로 변경되었는지 확인하고 확인할 수 있습니다 (다른 변경 사항도 있지만 확실하지는 않습니다). 문제가 해결되는지 확인하십시오.

+0

시도했지만 도움이되지 않았습니다. 내가 응용 프로그램을 decompiled 및 해당 mLayoutInflator.inflate (mUiResources.getLayout ("main", "layout", mUiPackage), null) l1.inflate (XmlRecourceParser, null) 될 것으로 나타났습니다. 그리고 안드로이드가 왜이 방법을 보았는지 이해할 수 없습니다. 1 API 수준에서 사용할 수있는 메서드 : [LayoutInflator] (http://developer.android.com/reference/android/view/LayoutInflater.html) – MistaGreen

+0

프로 가드 구성으로 코드를 실행 중이며이 문제가 보이지 않습니다. 당신은 * 프로 가드없이 * 시도 했습니까? 문제가 실제로 난독 화 단계에 있음을 확인할 가치가 있습니다. –

+0

프로 가드없이 모든 것이 완벽하게 작동합니다. – MistaGreen

0

최신 ProGuard 4.6으로 업그레이드하십시오. 최신 ProGuard 버전 인 ProGuard를 사용했을 때 비슷한 오류가 발생했지만 최신 ProGuard 버전은 아니 었습니다. 이를 다운로드하여 [ANDROID_SDK]/tool/proguard의 proguard 폴더로 바꿉니다. 그것은 나를 위해 문제를 해결했다. 귀하의 경우에도 작동하는지 확실하지 않지만, 광산은 인플레이터와 관련이 없지만 이전 ProGuard 버전의 경우에는 아무런 의미가없는 오류가 발생했습니다.