Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
konrads
2 / 2 / 0
Регистрация: 05.03.2013
Сообщений: 42
#1

proguard - Программирование Android

25.11.2013, 09:55. Просмотров 2351. Ответов 5
Метки нет (Все метки)

Пытаюсь сделать обфускацию приложения при помощи Proguard.
В теории вроде всё просто, на практике - никак не выходит.
Для работы программы в libs есть две дополнительные библиотеки:
android-support-v4.jar
jaybird2_2_3.jar
и каталог armeabi с парой файлов с расширением .so

Без proguard всё нормально работает.

Для подключения proguard в project.properties прописываю путь
proguard.config=proguard-project.txt

Ну и пытаюсь сделать экспорт, чтоб получить *.apk обработанный
proguard.
И лезут ошибки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[2013-11-25 12:29:39 - KitRealA] Proguard returned with error code 1. See console
[2013-11-25 12:29:39 - KitRealA] Warning: android.support.v4.media.TransportMediatorJellybeanMR2: can't find superclass or interface android.media.RemoteControlClient$OnGetPlaybackPositionListener
[2013-11-25 12:29:39 - KitRealA] Warning: android.support.v4.media.TransportMediatorJellybeanMR2: can't find superclass or interface android.media.RemoteControlClient$OnPlaybackPositionUpdateListener
[2013-11-25 12:29:39 - KitRealA] Warning: android.support.v4.media.TransportMediatorJellybeanMR2$1: can't find superclass or interface android.view.ViewTreeObserver$OnWindowAttachListener
[2013-11-25 12:29:39 - KitRealA] Warning: android.support.v4.media.TransportMediatorJellybeanMR2$2: can't find superclass or interface android.view.ViewTreeObserver$OnWindowFocusChangeListener
[2013-11-25 12:29:39 - KitRealA] Warning: com.tonicsystems.jarjar.ext_util.AntJarProcessor: can't find superclass or interface org.apache.tools.ant.taskdefs.Jar
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.internal.parser.RelaxedDnParser: can't find superclass or interface org.apache.harmony.security.x509.DNParser
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.ldap.asn1.ASN1ChoiceWrap: can't find superclass or interface org.apache.harmony.security.asn1.ASN1Choice
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.ldap.asn1.ASN1LdapFilter: can't find superclass or interface org.apache.harmony.security.asn1.ASN1Type
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.ldap.asn1.ASN1Null: can't find superclass or interface org.apache.harmony.security.asn1.ASN1Primitive
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.ldap.asn1.ASN1SequenceWrap: can't find superclass or interface org.apache.harmony.security.asn1.ASN1Sequence
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.rmi.registry.RemoteReference: can't find superclass or interface java.rmi.Remote
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.rmi.registry.RemoteReferenceWrapper: can't find superclass or interface java.rmi.server.UnicastRemoteObject
[2013-11-25 12:29:39 - KitRealA] Warning: org.apache.harmony.jndi.provider.rmi.registry.RemoteReferenceWrapper_Skel: can't find superclass or interface java.rmi.server.Skeleton
 
..... 
.....
.....
 
[2013-11-25 12:29:39 - KitRealA]       You should check if you need to specify additional program jars.
[2013-11-25 12:29:39 - KitRealA] Warning: there were 569 unresolved references to classes or interfaces.
[2013-11-25 12:29:39 - KitRealA]          You may need to specify additional library jars (using '-libraryjars').
[2013-11-25 12:29:39 - KitRealA] Warning: there were 91 unresolved references to program class members.
[2013-11-25 12:29:39 - KitRealA]          Your input classes appear to be inconsistent.
[2013-11-25 12:29:39 - KitRealA]          You may need to recompile them and try again.
[2013-11-25 12:29:39 - KitRealA]          Alternatively, you may have to specify the option 
[2013-11-25 12:29:39 - KitRealA]          '-dontskipnonpubliclibraryclassmembers'.
[2013-11-25 12:29:39 - KitRealA] java.io.IOException: Please correct the above warnings first.
[2013-11-25 12:29:39 - KitRealA]    at proguard.Initializer.execute(Initializer.java:321)
[2013-11-25 12:29:39 - KitRealA]    at proguard.ProGuard.initialize(ProGuard.java:211)
[2013-11-25 12:29:39 - KitRealA]    at proguard.ProGuard.execute(ProGuard.java:86)
[2013-11-25 12:29:39 - KitRealA]    at proguard.ProGuard.main(ProGuard.java:492)
Чувствую что это как то связано с этими библиотеками, но как отключить их от обфускации ?
без успеха пробовал так писать в proguard.project.txt:
Java
1
2
3
4
5
6
7
8
9
10
11
12
 
 -keepclassmembers class com.tonicsystems.* {
  public protected *;
  public static *;
  private *;
 } 
 
 -keepclassmembers class android.support.* {
  public protected *;
  public static *;
  private *;
 }
Подскажите, куда гребсти то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 09:55     proguard
Посмотрите здесь:

Proguard и NullPointerException - Программирование Android
Задействуйте! Надеюсь кто-то поможет. Проблема такая. В release версии ( с использованием proguard) приложения возникает ошибка ...

ProGuard ошибки - Программирование Android
Делаю компиляцию приложения, компилится хорошо, но в процессе работы приложения вылазят ошибки 01-11 22:51:24.745 2552-2747/com.app...

ProGuard сопротивление компилированию( - Программирование Android
Народ всем привет. Уже три дня бьюсь с ProGuard все время выходит такая ошибка: Warning:okio.DeflaterSink: can't find referenced class...

ProGuard на IntelliJ IDEA - Программирование Android
Кто нибудь пробовал в IDEA использовать ProGuard? В project.properties добавил: proguard.config=proguard-project.txt В окне...

Как настроить ProGuard в IDEA? - Программирование Android
Сабж. Искал, читал, но до конца так и не понял..

Свое правило для Proguard - Программирование Android
Как создать правило для Proguard? т.е. так чтобы он шифровал только нужные мне файлы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
25.11.2013, 13:59     proguard #2
-dontwarn android.support.**
-dontwarn org.apache.harmony.**
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
25.11.2013, 15:07     proguard #3
У меня вопрос по обфескации из IntelliJ IDEA.
Возможно ли это делать из этой IDE?
В инете не нашел информации.

P.S. Пытался настроить ANT для компиляции, но не получилось.
konrads
2 / 2 / 0
Регистрация: 05.03.2013
Сообщений: 42
25.11.2013, 16:31  [ТС]     proguard #4
Цитата Сообщение от Netscape Посмотреть сообщение
-dontwarn android.support.**
-dontwarn org.apache.harmony.**
Ну для сборки помогло, тока ещё пришлось добавить несколько строк, получилось так:
Java
1
2
3
4
5
6
-dontwarn android.support.**
-dontwarn org.apache.harmony.**
-dontwarn com.tonicsystems.**
-dontwarn org.firebirdsql.**
-dontwarn org.antlr.**
-dontwarn org.apache.**
Теперь экспорт происходит без ошибок, но и программа перестала работать, проблемы с подключением к базе данных


Ну вот как ей обьяснить чтоб запутала только неподгружаемые классы ?
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
25.11.2013, 17:12     proguard #5
Попробуйте вот такой конфиг:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
##---------------Begin: proguard configuration common for all Android apps ----------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
 
-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
 
-dontwarn android.support.**
-dontwarn org.apache.harmony.**
-dontwarn com.tonicsystems.**
-dontwarn org.firebirdsql.**
-dontwarn org.antlr.**
-dontwarn org.apache.**
 
-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 * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
 
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
 
# Preserve all native method names and the names of their classes.
-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);
}
 
# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
-keepclassmembers class **.R$* {
public static <fields>;
}
 
# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
 
-keep public class * {
public protected *;
}
 
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}##---------------End: proguard configuration common for all Android apps ----------
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 08:46     proguard
Еще ссылки по теме:

Оптимизация по размеру при использовании ProGuard - Программирование Android
Помогите, пожалуйста, разобраться. Я работаю в Eclipse. В файле project.properties я добавил строчку...

Eclipse proguard public class android.support.v7.internal.widget.ActionBarView.HomeView - Программирование Android
Добрый день. Сейчас изучаю разработку под андроид. Споткнулся на следующей ошибке This class should be public...

Большие трудности с Proguard v3.6 - Java
Обфускатор плохо работает с внутренними и анонимными классами (переименовывать - переименовывает, а вот прога потом их не видит), пекеджи...

J2SE + Spring beans + Proguard - Java EE
Добрый день. Делаю веб-приложение, оно включает в себя Jetty embedded, Vaadin, Spring. Использую Intellij IDEA. Конфиги Spring-бинов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
konrads
2 / 2 / 0
Регистрация: 05.03.2013
Сообщений: 42
26.11.2013, 08:46  [ТС]     proguard #6
Цитата Сообщение от Netscape Посмотреть сообщение
Попробуйте вот такой конфиг:
Попробовал - сразу заработало

Посмотрел какой из параметров ключевой для работы программы.
Оказался вот этот:
XML
1
2
3
-keep public class * {
public protected *;
}
Для того чтоб это не касалось программы разбил его на 3 части:
XML
1
2
3
4
5
6
7
8
9
10
11
-keep public class android.support.** {
public protected *;
}
 
-keep public class com.tonicsystems.** {
public protected *;
}
 
-keep public class org.** {
public protected *;
}
В итоге получилось так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
 
-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
 
-dontwarn android.support.**
-dontwarn org.apache.harmony.**
-dontwarn com.tonicsystems.**
-dontwarn org.firebirdsql.**
-dontwarn org.antlr.**
-dontwarn org.apache.**
 
-keep public class android.support.** {
public protected *;
}
 
-keep public class com.tonicsystems.** {
public protected *;
}
 
-keep public class org.** {
public protected *;
}
Ну и запускается это в связке со стандартным файлом настройки proguard proguard-android.txt, т.е. для того чтоб это заработало в файле project-properties.txt убран коментарий со строки запуска proguard:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=c:/android/sdk-windows/sdk/tools/proguard/proguard-android.txt:proguard-project.txt
 
# Project target.
target=android-17
Yandex
Объявления
26.11.2013, 08:46     proguard
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru