Android Proguard пропустить внешний jar

я пытался использовать Proguard в своем проекте Android, я настраивал Proguard, используя командную строку «android update project / path / to / project», и файл proguard.cfg был создан в корневом каталоге проекта. (В мой Eclipse с Android 2.3 sdk, при создании нового проекта файл proguard.cfg не создается автоматически, поэтому мне приходится добавлять его вручную с помощью командной строки).

Когда я экспортирую проект, я получил следующие ошибки

    [2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.io.Buffer
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields$Field
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields$Field
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields$Field
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.Address
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.io.Buffer
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.Address
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields$Field
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.HttpRequestAdapter: can't find referenced class org.mortbay.jetty.HttpFields
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.CommonsLoggingLoggerFactory: can't find referenced class org.apache.commons.logging.LogFactory
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.CommonsLoggingLoggerFactory: can't find referenced class org.apache.commons.logging.LogFactory
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLoggerFactory: can't find referenced class org.slf4j.LoggerFactory
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLoggerFactory: can't find referenced class org.slf4j.LoggerFactory
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.jetty.JettyOAuthConsumer: can't find referenced class org.mortbay.jetty.client.HttpExchange
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLoggerFactory: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLoggerFactory: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.signature.OAuthMessageSigner: can't find referenced class org.apache.commons.codec.binary.Base64
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.signature.OAuthMessageSigner: can't find referenced class org.apache.commons.codec.binary.Base64
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.signature.OAuthMessageSigner: can't find referenced class org.apache.commons.codec.binary.Base64
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.signature.OAuthMessageSigner: can't find referenced class org.apache.commons.codec.binary.Base64
[2011-02-06 09:02:49 - TestProject] Warning: oauth.signpost.signature.OAuthMessageSigner: can't find referenced class org.apache.commons.codec.binary.Base64
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.SLF4JLogger: can't find referenced class org.slf4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Level
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Level
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject] Warning: twitter4j.internal.logging.Log4JLogger: can't find referenced class org.apache.log4j.Logger
[2011-02-06 09:02:49 - TestProject]       You should check if you need to specify additional program jars.
[2011-02-06 09:02:49 - TestProject] Warning: there were 59 unresolved references to classes or interfaces.
[2011-02-06 09:02:49 - TestProject]          You may need to specify additional library jars (using '-libraryjars'),
[2011-02-06 09:02:49 - TestProject]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-02-06 09:02:49 - TestProject] java.io.IOException: Please correct the above warnings first.
[2011-02-06 09:02:49 - TestProject]     at proguard.Initializer.execute(Initializer.java:308)
[2011-02-06 09:02:49 - TestProject]     at proguard.ProGuard.initialize(ProGuard.java:210)
[2011-02-06 09:02:49 - TestProject]     at proguard.ProGuard.execute(ProGuard.java:85)
[2011-02-06 09:02:49 - TestProject]     at proguard.ProGuard.main(ProGuard.java:499)

Эти сообщения об ошибках указывают на четыре внешних jar-файла, используемых в моем проекте

(. Classpath)


        
        
        

Вот мой файл proguard.cfg

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

-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

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

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

. Я пробовал некоторые решения, найденные в Интернете, добавив параметр '-libraryjars', например :

-libraryjars /Users/lorensiuswlt/Android/android-sdk-mac_x86/libs/Twitter/twitter4j-core-2.1.6.jar

но это не поможет. вики скоро появится. Хорошо, теперь у меня 300 000 ...

предыдущий соответствующий вопрос от меня здесь Обратный инжиниринг старых программ рисования

Я создал свою базу операций здесь: http: // animatorpro.org скоро появится вики.

Хорошо, теперь у меня есть устаревшая кодовая база MSDOS на 300 000 строк. Это своего рода ситуация «будь осторожен в своих желаниях». Я не опытный программист на C. Я тоже не совсем неопытный, но для всех намерений и целей я новичок в языке и, в частности, в тонкостях его библиотек. Я особенно игнорирую капризы различий между программами на C, написанными специально для MSDOS, и программами, которые являются кроссплатформенными. Однако я изучаю эту кодовую базу уже более года, и вот что я знаю об Animator Pro:

Используемые компиляторы и инструменты:

  • Компилятор Watcom C
  • tcmake (создание программы из Turbo C)
  • 386asm, специализированный ассемблер для расширителя Phar Lap dos
  • и, конечно же, сам расширитель Phar Lap dos.
  • набор малоизвестных утилит dos.

Большая часть компиляции, похоже, осуществляется с помощью командных файлов. Хотя я получил копии всех этих инструментов, мне еще не удалось их собрать. (хотя я скомпилировал его старшего брата, оригинал Autodesk Animator.

У него есть система плагинов, которая реплицирует DLL до того, как DLL были доступны, на основе REX. Система плагинов обрабатывает:

  • Видеодрайверы (с множеством включенных VESA драйверы)
  • Драйверы ввода (включая планшеты и клавиатуры Wacom)
  • Средства рисования
  • Чернила (например, фильтры Photoshop или режимы наложения)
  • Дополнения к сценариям (по сути, скомпилированные сценарии)
  • Форматы файлов

У него есть собственный интерпретатор скриптов под названием POCO, основан на языке C - Язык сценариев обладает достаточной мощностью, чтобы делать практически все, что может делать система плагинов - Только медленнее.

Учитывая эту информацию, это мой план развития. Пожалуйста, критикуйте это. Исходный код доступен по ссылке выше, так что вы можете легко, если вы так склонны, оценить ситуацию самостоятельно.

  1. Скомпилируйте с его оригинальными инструментами.
  2. Переключитесь на использование DJGPP и внесите необходимые изменения, чтобы получить его нужно скомпилировать с этим, плюс оригинальный ассемблер.
  3. Включите библиотеку Allegro.cc «Game» и передайте ей как можно больше функций - возможно, просто написав новые драйверы видео и ввода, использующие Allegro API . Я думаю об allegro, а не о SDL, потому что: существует версия Allegro для DOS, и, что интересно, Одна из его основных функций - это возможность воспроизводить FLIC в собственном формате Animator Pro.
  4. Надеюсь, после 3 я исключу большую часть или весь Ассемблер в проекте. Я говорю с надеждой, потому что это на малоизвестном диалекте, который не собирается ни в одном современном бесплатном ассемблере без значительных изменений. Я перепробовал их все. Все, что остается, преобразуется в ассемблер в NASM или в код C, если я могу определить фактическую функцию ассемблера.
  5. Переключите расширитель dos с Phar Lap на HX Dos http://www.japheth.de/HX .html , который обещает воспроизвести как можно больше API WIN32. Затем внесите все необходимые изменения кода, чтобы это работало.
  6. Переключитесь на версию Allegro.cc для win32, предполагая, что версия win32 может работать поверх HXDos. Внесите любые дальнейшие необходимые изменения
  7. Измените систему плагинов, чтобы использовать какую-то стандартную кроссплатформенную библиотеку плагинов. Что бы это было, понятия не имею. Может быть, вы можете предложить какие-нибудь предложения? Я поговорил с разработчиком, который изначально написал систему плагинов, и он сказал, что некоторые вещи, которые она делает, невозможны в современных ОС из-за ограничений сегментации. Я не уверен, что это означает, но полагаю, что это означает, что все плагины нужно будет переписывать практически с нуля.
  8. Волшебным образом я сделал все вышеописанное, и мы можем попробовать запустить его в Windows , osx и linux, имея дело с другими кроссплатформенными мелочами, такими как длинные имена файлов, и вещами, о которых я не подумал.

У кого-нибудь есть проблемы с этим? Аллегро - хороший выбор? если не, Почему? что бы вы сделали с этой системой плагинов? Что бы вы сделали по-другому? Является ли все это глупым, и следует ли мне просто переписать его с нуля, взяв за основу оригинал? (на это у первоначального разработчика, очевидно, уйдет «около месяца»)

Одна вещь, о которой я не упомянул выше, - это система текста / шрифта. Не знаю, что с этим делать, но Animator Pro имеет свой собственный формат шрифтов, но также может использовать шрифты Postscript Type 1 и некоторые другие форматы.

13
задан Community 23 May 2017 в 12:00
поделиться