• 0
Авторизация  
Pulsarius

Мусор при развёртывании приложений

Вопросы

Привет, форумчане! Я уже как-то задавал подобный вопрос, но видимо никто не сталкивался с этим. Может быть сейчас кто-нибудь столкнулся. Эта проблема качует из версии в версию и никто не исправляет это, а может быть я что-то не всё правильно делаю. Конкретнее, я в своём проекте использовал TcxPageControl от DevExpress и TFDConnection, TFDQuery от FireDAC. Теперь я удалил эти элементы из своего проекта, совершенно нигде не использую TcxPageControl и приложение у меня теперь не коннектится напрямую с базой данных. Вручную почистил все #include и #pragma link, но линковщик C++ Builder мне всё равно усердно впихивает cxPageControlRS25.bpl и firedac250.bpl в exe-шник. Если делать Deployment на удалённую машину с динамическими зависимостями от рантаймов, то соответственно туда тоже копируются эти ненужные cxPageControlRS25.bpl и firedac250.bpl. Открыл проект *.cbproj как текст и увидел там эти самые названия. Можно конечно вручную тоже их поудалять, но есть ли какой-то адекватный способ удаления зависимостей от уже ненужных библиотек, что бы вручную не выкосить что-нибудь лишнее? Это я как пример всего две bpl упамянул, а на самом деле там больше, ведь DevExpress и FireDAC там за собой тащат ещё кучу всяких bpl, типа там dxCore.bpl, datadb.bpl и т.п. Вот и происходит такая мусорка в скомпилированном файле и размер соответственно напрасно большой делается. В Visual Studio я с подобным не сталкивался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 ответов на этот вопрос

  • 0

Ничего в этом плане с 7 версии не изменилось. Единственный надёжный что-то вычистить в студии способ - это far, alt+7, *.*, и искать все упоминания в данном случае файлов от DevExpress/FireDAC...

Эта проблема из той же серии, что когда проект копируешь в другую папку, и начинаешь там без предварительной подготовки что-то править, то правишь старые файлы а не скопированные. Подобных ммм... "фишек" у студии куча. Надо или мириться, или переходить на что-то другое. В последней версии (10.2-10.2.2) они даже ctrl+пробел сломали, а Вы  про автоматическую прочистку лишних bpl. :D
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Сейчас внимательно всё проверил и заметил, что компилятор C++ Builder не такой уж и глупый. Если посмотреть каким-нибудь PE Explorer'ом, то исполняемый файл не содержит ссылок на неиспользуемые bpl, если компилить с динамическими рантаймами, и не содержит их внутри, если компилить со статическими рантаймами. Это Deployment Manager и Project Information делают выводы об используемых bpl, видимо, исходя из cbproj файла, а не из анализа скомпилированного исполняемого файла, что, по-моему, несовсем корректно.

Ещё заметил такую неприятную вещь, исходя из опыта работы с другими IDE. У Embarcadero замечательные графические и неграфические библиотеки, которые очень ускоряют разработку софта и, как мне кажется, ни одна другая библиотека других фирм, не сравнятся с RAD Studio, плюс ещё и кроссплатформенность появилась. Но почему редактор кода-то такой отсталый? Напоминает нулевые года и вот почему:

1. Не высвечивает подсказки корректно, например, я пишу "TStringBuilder *builder = new ..." и разумеется логично в первой позиции подсказки предложить "new TStringBuilder()", но нет же, высвечивается всё, что угодно, но только не то, что по логике нужно.

2. Я считаю, что посказки должны показываться автоматом по первым символам, как в других IDE, а не по ручному нажатию "Ctrl + Space".

3. Поля и методы шаблонов и контейнеров STL вообще не подсвечивает, а это  основа!

4. При требовании подсказки редактор может вообще задуматься на несколько секунд. Что там можно искать у класса из 3-х полей и 3-х методов, который объявлен в рядом лежащем файле?!

5. Почему, когда в хидере объявляешь метод, он автоматом не создаётся в сорс файле, а всё приходиться печатать вручную, как-будто кодишь в обычном текстовом редакторе?

6. При желании перейти от объявления метода к реализации или наоборот может перекинуть куда-нибудь не туда, либо вообще не отреагировать. В худшем случае "упасть".

7. Не предлогает переименовать все ссылки, если переименовывешь переменную или класс.

8. Зачем мне показывать хидер, где объявлен метод, когда я навожу мышкой на него, а не его сигнатуру, что тоже логичнее?

9. Бывает вообще никаких подсказок не выдаёт. Это когда что-то не дописал, решил вернуться чуть-чучть назад кое-что подправить, и всё, фиг с маслом. Для чего эта блокировка подсказок при якобы одной хотя бы ошибки? Или не высвечивает в таком случае "dynamicArray[dyn...]", а хочеться написать "dynamicArray[dynamicArray.Length - 1]".

Всё, что я привёл здесь в пример, в других IDE это давным давно уже это не новость и всё давно подсвечивается и подставляется. Это в Visual Studio, Qt Creator, CLion и других, даже в не сишных (IntelliJ IDEA, PyCharm, NetBeans и т.п.) и небольших IDE. Интересно, редактор кода RAD Studio дорастёт когда-нибудь тоже до такого?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Большинство этого лечится через CnPack+Ide Fix. А вот идиотская работа клавиши назад мышки и ctrl+z действительно доставляют...
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 часов назад, Pulsarius сказал:

Всё, что я привёл здесь в пример, в других IDE это давным давно уже это не новость и всё давно подсвечивается и подставляется. Это в Visual Studio, Qt Creator, CLion и других, даже в не сишных (IntelliJ IDEA, PyCharm, NetBeans и т.п.) и небольших IDE. Интересно, редактор кода RAD Studio дорастёт когда-нибудь тоже до такого?

Если хочется "сахара", то это не к RAD Studio! Дорастет или не дорастет - это риторический вопрос! На вкус и цвет....Лично меня все устраивает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 часа назад, wamaco сказал:

Лично меня все устраивает!

Может быть всё таки что-то не устраивает, просто продукт не имеет аналога на рынке, поэтому приходится мириться "со сложностями"?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
21 час назад, Akad сказал:

Может быть всё таки что-то не устраивает, просто продукт не имеет аналога на рынке, поэтому приходится мириться "со сложностями"?
 

Отнюдь! Всегда существует несколько вариантов решения задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Похожий контент

    • От x11
      В Deployment есть колонка "Local path" как там отредактировать данные?
      Delphi 10.1
    • От Pulsarius
      Здравствуйте, Ярослав! Скажите, пожалуйста, есть ли какая либо информация о планах поддержки Linux в C++ Builder? Нашей компании очень подходит RAD Studio для наших целей и быстрой разработки. Планируем приобрести лицензию. В ближайшее время планируем разрабатывать наше решение для Windows, macOS и Android, пока этого достаточно. Но есть некоторые сомнения о выборе RAD Studio и всё из-за того, что примерно через год потребуется наше решение реализовать и для Linux. Какова вероятность, что C++ Builder обзаведётся поддержкой Linux'а в течении 1 - 1,5 года? Delphi не рассматриваем. Заранее спасибо за ответ.
    • От Alesk
      В приложении имеется ~ 160 файлов общим весом ~ 30 мб, которые добавлены в проект через Deployment. Используются они след. образом:
      Tpath.Combine(Tpath.GetDocumentsPath, 'Sample.file'); Проблема в том, что чем больше файлов становится, тем дольше приложение запускается(1 сек заставка, дальше ~ 5 сек черный экран), причем как на слабом железе, так и на мощном. Мб другой способ хранения файлов решит проблему? Если да, то какой?
    • От MolarMak
      Всем доброго времени суток, столкнулся с такой проблемой, на определенной форме включается медиаплеер и начинает проигрывать определенный трек, но при блокировке трек продолжает играть. Как обработать событие блокировки экрана и по нему отключать медиаплеер? Пишу на c++ builder.
      Пробовал делать через EnteredBackground, руководствовался заметкой по написанию подобного на Delphi xe http://delphifmandroid.blogspot.com/2013/10/blog-post.html
      Возможно есть другие варианты решения?
    • От Pulsarius
      Привет всем! Скажите, кто-нибудь сталкивался с проблемой компиляции проекта с использованием FireDAC в C++ Builder (RAD Studio 10 Seattle) под Windows 64-bit? В проекте есть такие компоненты, как TFDConnection, TFDQuery, TFDTable. TFDConnection настроен на работу с SQLite. При компиляции в режиме Release, естественно с отключенными Dynamic RTL и Link with runtime packages, под Windows 32-bit всё в порядке, а вот под Windows 64-bit происходит ошибка, как я понял, линковщика:
      [ilink64 Warning] Warning: Out of memory [ilink64 Error] "ilink32" exited with code 2. Мне так кажется, что нет статических библиотек FireDAC для Windows 64-bit, и тем самым не удастся собрать проект со статической линковкой нужных либ, а только придётся таскать нужные библиотеки за exe-шником. Я правильно понимаю?
    • От Platon
      Вообще несколько вопросов по данной теме, буду рад если тыкните на документацию embarcadero.
      В данный момент apk моего приложения весит ~90мб и помещается оно на sd-карту.
       
      1. Сколько весит пустой apk с одной формой?
      2. Как устанавливать apk на телефон? Где можно это указать в IDE?
      3. Как можно уменьшить размер apk? Убрать лишние библиотеки? Может как-то еще? 
      4. В своем приложении я использую много картинок, каждая в среднем занимает ~100кб. Это нормальный размер для картинок? Или можно и лучше использовать меньший размер? Но тогда качество будет ужасным.
    • От Pulsarius
      Привет всем!  
      Кто-нибудь уже заметил, что приложения для десктоп, скомпилированные в последней версии C++ Builder (RAD Studio 10 Seattle), стали зависеть от BORLNDMM.dll? В предыдущих версиях студии такого не было. Я знаю, что это Борландовская библиотека для работы с памятью, и от неё зависели программы, написанные на ранних версиях C++ Builder, ещё будучи при Борланде. Чем же интересно обосновано возвращение такой зависимости и можно ли как-нибудь от неё избавиться?   P.S. Я пишу DLL. Пробовал избавиться от зависимости, отключив в настройках проекта "Use 'classic' Borland compiler", т.е. чтобы использовать Clang. Пришлось немного отредактировать код. Зависимость исчезла, но, при выгрузке моей DLL в главной программе функцией FreeLibrary, вылетает ошибка типа access violation. Такая ошибка возникает только тогда, когда DLL скомпилирована в режиме Release, в режиме Debug всё работает нормально, и поэтому отследить в чём дело очень сложно. Когда возникает ошибка, при отладке главной программы, отладчик перебрасывает в окно дизассемблера, где вместо ассемблерных команд знаки вопроса. Т.е. такое ощущение, что при вызове функции FreeLibrary, в каком-то месте происходит "прыжок" на адрес в памяти, где нет никаких инструкций. Если скомпилировать DLL с использованием классического компилятора Borland, то и в режиме Debug, и в режиме Release всё работает нормально.
    • От Igor
      При установке приложения появляется список "Разрешить этому приложению", в данном списке куча всего казалось бы моему приложению не требуемого, в том числе: "Платные услуги".
      Не могу понять как определить данный список под приложение, чтобы лишнего оно не просило при установке и не пугало пользователей.
       
      Подумал может в deployment где-то это, или в uses надо что-то убрать, но не знаю чего, нагуглить тоже не выходит.
       
      Помогите пожалуйста.
       
      Список:
      Ваше местоположение Сетевой обмен данными Личная информация Память Телефонные вызовы Управление оборудованием Платные услуги (Посылать прямые вызовы на номера телефонов) и ещё под скрыть:
      Инструменты разработки (Проверьте доступ к защищенному хранилищу) - это может в режиме дэбага такое, если нет, то как убрать тоже не пойму.. P.S.:
       
      Из всего перечисленного кажется нужно только: 
      Память, т.к. создаю txt файл и сохраняю в него данные (да и нужно ли для этого такое разрешение?) Возможно ещё, но вряд ли:
      Личная информация, для определения времени на устройстве, но думаю это не то, и время и так определяется.
    • От SerhioUser
      В Delphi делается так:
      type [ComponentPlatformsAttribute(pidWin32 or pidWin64)] TMyComponent = class(TComponent) private ... end; Как это сделать в C++ Builder?!!
       
      Облазил весть инет, и на docwiki.embarcadero.com искал - инфа есть только по Delphi.
      Пытался сделать двойное наследование от TComponent и ComponentPlatformsAttribute - компилятор ругнулся что для Delphi-классов множественные базовые классы не поддерживается:
      "E2278 Multiple base classes not supported for Delphi style classes"
      Делать компонент на Delphi - не предлагать.
    • От SerhioUser
      Здравствуйте!
       
      Вопрос по Андроиду.
      Как из одного приложения (A) запустить инсталляцию apk другого приложения (Б) (желательно полностью в авто режиме), а потом из приложения (A) запустить приложение (Б)?
      Объясняю зачем: делается корпоративная программа, (работающая на нескольких планшетах), которая часто обновляется, и нужно написать агент, который должен в авто-режиме принимать apk по сети и обновлять приложение (Б).
      Пишу на C++ Builder XE6, Андроид 7.
       
      Спасибо.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу