2010-10-28 3 views
3

Я пытаюсь использовать ProGuard с Android. Я нашел несколько скриптов ProGuard для использования, причем следующий пример является примером (я нашел несколько других, которые являются одинаковыми или очень похожими). Однако, когда я пытаюсь запустить ProGuard, используя этот скрипт, я получаю ошибку:Использование ProGuard с Android.

«Ожидание типа Java до»; в строке 23 файла ... "

Я совершенно новый для ProGuard. Может кто-то объяснить, что здесь не так

Спасибо.

-injars  bin(!.svn/**) 
-outjars  obfuscated 
-libraryjars C:\android-sdk_r04-windows\android-sdk-windows\platforms\android-1.6\android.jar 
-libraryjars C:\GoogleAnalyticsAndroid_0.7\libGoogleAnalytics.jar 

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

-printmapping proguard.map 
-keepattributes SourceFile,LineNumberTable 

-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 

-keepclasseswithmembernames class * { 
    native ; 
} 

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

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

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

Я не вниз избиратели, но я думаю, что такие вопросы, как «где моя ошибка» больше подходит для форума, потому что другие не получите много из читая решение проблемы. Если вопрос немного изменится: как сделать конфигурационный файл proguard, который делает то, что я хочу, это был бы гораздо лучший вопрос, потому что ответы были бы полезны для других. – arberg

ответ

3

Проблема здесь:

native ; 

Попробуйте изменить его:

native <methods>; 
+0

Спасибо за ответ. Я уже пробовал это, и он исправляет ошибку в этой строке, но затем я получаю сообщение об ошибке «public (android.content.Context, android.util.AttributeSet); линия. Я не понимаю, что, основываясь на сообщениях, которые я нашел, другие люди явно использовали этот сценарий успешно. Использовали ли они более старую версию ProGuard или что-то еще? Благодарю. –

+1

Хорошо, я считаю, что я определил проблему. Эти скрипты были размещены в некоторых блогах, и кажется, что блоги «съели» все элементы, которые были в угловых скобках (например, тег «»). Отслеживание этих элементов и их восстановление заставили его работать. благодаря –

0

Глядя на сообщение об ошибке компилятор дал, это выглядит как компилятор практически говорю вам, что эта проблема.

"Expecting java type before ';' in line 23 of file ..."

Я потерял счет, но, похоже, этой линии линия 23:

native ;

Я не знаю о вас, но это не выглядит как действительный Java в все.

+1

Это не java, это скрипт, который вводится в ProGuard, который представляет собой java-программу, которая берет Java-код и оптимизирует его, и запутывает его. Я надеялся, что кто-то, у кого есть опыт работы с ProGuard, может знать ответ. –

3

Как я заметил выше, представляется, что проблема связана с тем, что блог, от которого я получен скрипты, казалось, «ели» что-либо с угловыми скобками. Я решил, что было бы неплохо опубликовать исправленный код, если кто-то еще его ищет. Исправленный код выглядит следующим образом:

-injars  bin(!.svn/**) 
-outjars  obfuscated 
-libraryjars C:\android-sdk\platforms\android-4\android.jar 

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

-printmapping proguard.map 
-keepattributes SourceFile,LineNumberTable 

-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 

-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); 
}