2013-05-15 2 views
2

OK Это заводит меня с ума из-за дня. Я в основном парень iOS, поэтому я не знаю много о Proguard и т. Д. Я сделал приложение для Android, которое включает как Dropbox, так и API Google Диска. Приложение отлично работает, если я развожу его на телефоне через Eclipse, но я получаю неприятную ошибку на консоли, когда я пытаюсь экспортировать приложение для генерации файла apk. Мои project.properties файлы было вот так ...Проблемы с защитой с созданием apk

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt 

# Project target. 
target=android-17 
android.library=false 

И диалог ошибка это ... PROJECT_FOLDER_NAME/ProGuard-project.txt не существует или не является обычным файлом

Итак, я отредактировал мои project.properties и удалил proguard-project.txt часть.

Теперь при создании APK я получаю эти ошибки на консоли ...

[2013-05-15 18:48:28 - BackMyAppUp] Proguard returned with error code 1. See console 
[2013-05-15 18:48:28 - BackMyAppUp] Note: there were 367 duplicate class definitions. 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.commons.logging.impl.ServletContextCleaner: can't find superclass or interface javax.servlet.ServletContextListener 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.FormBodyPart: can't find superclass or interface org.apache.james.mime4j.message.BodyPart 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.HttpMultipart: can't find superclass or interface org.apache.james.mime4j.message.Multipart 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.MinimalField: can't find superclass or interface org.apache.james.mime4j.parser.Field 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.content.AbstractContentBody: can't find superclass or interface org.apache.james.mime4j.message.SingleBody 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.content.ContentBody: can't find superclass or interface org.apache.james.mime4j.message.Body 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: org.apache.http.entity.mime.content.ContentBody: can't find superclass or interface org.apache.james.mime4j.descriptor.ContentDescriptor 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: library class android.net.http.AndroidHttpClient extends or implements program class org.apache.http.client.HttpClient 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string 
[2013-05-15 18:48:28 - BackMyAppUp] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string 

и около 300 подобных линий.

Если я использую apk, сгенерированный из папки bin, функция Google Drive не работает в телефоне, но работает, если я развертываю через Ecipse. Пожалуйста, помогите мне.

+0

похоже: http://stackoverflow.com/questions/18646899/proguard-cant-find-referenced-class-com-google-android-gms-r/ – trante

ответ

0

Хорошо, что это выглядит глупо, в течение 3 дней я перепутал с proguard, но проблема заключалась в том, что я использовал ключ отладочного ключа SHA1 в apk-релизе, следовательно, сбой приложения для Google-диска, я использовал правильный SHA1-ключ в Google API-панель для ее решения.

2

Либо вы хотите использовать Proguard (оптимизация, обфускация, ...), либо нет.

Если вы не хотите, просто комментарий (с #) часть указывает на конфигурацию Proguard в ваших project.properties:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt 

Если вы хотите, решение держать линию, как это , а также создавать на следующие файлы: Proguard-project.txt и Proguard-Google-апи-client.txt

для Proguard-Google-апи-client.txt, вы можете найти Exemple здесь: https://google-api-java-client.googlecode.com/hg/google-api-client-assembly/proguard-google-api-client.txt

Для proguard-proj ect.txt, это будет зависеть от того, какие ошибки вы получите после подачи другой. Вам может понадобиться добавить несколько:

-libjars <path_to_a_jar_used_in_app> 

и некоторые другие -dontwarn, в зависимости от предупреждений вы получите ...

+0

Если я не использую proguard, комментируя в проекте txt, часть Dropbox работает отлично, но не часть диска Google. –

+0

Итак, еще одна дикая догадка. попробуйте в своем проекте.свойства следующую строку: proguard.config = $ {sdk.dir} /tools/proguard/proguard-android.txt:proguard-google-api-client.txt И в proguard-google-api-client.txt (создайте его, если вам нужно), скопируйте конфигурацию proguard, которую я дал в предыдущем ответе. И, пожалуйста, укажите, если он не работает, если он не работает во время сборки, выполнения на эмуляторе или на вашем физическом телефоне. – Passeur

+0

Просто короткое примечание: подсказка '-libjars' помогла мне решить мою проблему, но правильная команда -' -bibraryjars'. Может быть, это помогает другим избежать нескольких минут путаницы и поиска :-) –

4

FWIW, после обновления до ADT 22 у меня было более 800 подобных ошибок с конфигурацией Proguard которая ранее работала нормально. Приложение также разбилось на устройстве с ошибками ClassDefNotFound при построении без Proguard.

В конце концов, это было тиканье «Частные библиотеки Android» на вкладке «Заказ и экспорт» редактора путей построения для моего основного проекта и всех его библиотечных проектов.

+0

его уже отметили, я добавил некоторые -dontwarn вещи, и теперь apk создан, но приложение разбилось на часть загрузки Google Диска. –

Смежные вопросы