Lockbox 3 для Android с XE7 не работает

Я только что обнаружил, что lockbox 3.6.0 должен поддерживать Android. Однако, когда я смотрю в свою палитру, я вижу, что кодек поддерживает только win32 и win64.

Как я могу заставить его работать и с моими приложениями для Android?

Я использую Delphi XE7 и уже выполнил инструкции по установке, прилагаемые к пакету. Для приложения Windows это работает просто отлично.


person SweElite    schedule 03.01.2015    source источник
comment
Что вы имеете в виду под кодеком? Какую ревизию из репо вы скомпилировали?   -  person David Heffernan    schedule 03.01.2015
comment
Я имею в виду компонент Tcodec в палитре. Версия 3.6.0, загруженная с сайта google svn Lockbox 3.   -  person SweElite    schedule 04.01.2015
comment
Какую ревизию вы собираете?   -  person David Heffernan    schedule 04.01.2015
comment
Не уверен, что ты имеешь в виду, Дэвид. Версия Lockbox — 3.6.0 (последняя стабильная версия).   -  person SweElite    schedule 04.01.2015
comment
Получить последнюю версию из исходного репозитория   -  person David Heffernan    schedule 04.01.2015
comment
О, я вижу. Это редакция 21: /tags/LB 3.6.0.0 10 ноября 2014 г.   -  person SweElite    schedule 04.01.2015


Ответы (1)


У вас есть два варианта:

(1) Время выполнения

Вы всегда можете создать компоненты во время выполнения. На веб-сайте есть пример того, как это сделать, и я копирую фрагмент этого примера ниже. Просто замените функции ShowMessage() тем, что подходит...

procedure EncryptAStream( Plaintext, Ciphertext: TStream);
var
 Codec1: TCodec;
 CryptographicLibrary1: TCryptographicLibrary;
begin
ShowMessage( 'Demonstration of How to Encrypt a Stream with TurboPower LockBox 3.');
Codec1 := TCodec.Create( nil);
CryptographicLibrary1 := TCryptographicLibrary.Create( nil);
Codec1.CryptoLibrary  := CryptographicLibrary1;
Codec1.StreamCipherId := uTPLb_Constants.BlockCipher_ProgId;
Codec1.BlockCipherId  := 'native.AES-256';
Codec1.ChainModeId    := uTPLb_Constants.CBC_ProgId;
Codec1.Password := 'my utf-16le password';

// Codec1.Reset;  Reset if you are continuing from a previous encryption operation.
Codec1.EncryptStream( Plaintext, Ciphertext);
// Codec1.Burn;   Burn if you need to purge memory of sensitive data.

Ciphertext.Position := 0;

ShowMessageFmt(
 'The ciphertext for AES-256 with CBC chaining'#13#10 +
 ' of plaintext ''banana'' (UTF-8 encoding),'#13#10 +
 ' and password ''my utf-16le password'' (UTF-16LE encoding),'#13#10 +
 ' prepended by 64 bit nonce, (being the IV),'#13#10 +
 ' and rendered for display in base64 is ...'#13#10 +
 '%s', [Stream_to_Base64( Ciphertext)]);

Codec1.Free;
CryptographicLibrary1.Free;
end;

(2) Время разработки

Требуется небольшая настройка, чтобы добавить компоненты в палитру для Android. Это будет сделано для вас в следующей версии TPLockbox 3, которая будет выпущена, а пока вот процедура...

  1. Удалите vcl, vclimg и dbrtl из требований времени выполнения TPLB3.
  2. Для пакета времени выполнения добавьте целевую платформу Android и сделайте ее активной. Но, конечно, не добавляйте эту платформу в пакет времени разработки.
  3. Бинарный продукт для среды выполнения должен называться libTP_LockBox3_XE7.so, где XE7 — это метка вашей версии компилятора.
  4. Перед объявлениями двух компонентов (TCodec и TCryptographicLibrary) следует указать

    [ComponentPlatformsAttribute( pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDevice or pidAndroid)]
    TCodec = class( TTPLb_BaseNonVisualComponent, ICryptographicLibraryWatcher,
                     { etc. }
    

Это ключ ко всему. ComponentPlatformsAttribute атрибут определяет, для каких платформ должен отображаться компонент, на палитре. Если не объявлено, я считаю, что по умолчанию используется pidWin32 or pidWin64, но я не могу указать на какую-либо официальную документацию, подтверждающую это.

  1. Перекомпилируйте пакет времени выполнения. Помните, что если вы компилируете с помощью MS-BUILD, в некоторых версиях компилятора вам нужно save-all, прежде чем вы сможете успешно скомпилировать.
  2. Перейдите в Инструменты IDE | Options и откройте путь к библиотеке для платформы Android. Убедитесь, что этот путь включает расположение файлов dcu для корпуса Android. Например, в моей установке это...

    C:\Dev\TPLB\work-products\ephemeral\dcu\XE6\Android

Вы должны физически проверить этот каталог. Например, у него должен быть файл с именем TPLB3.AES.dcu и еще один с именем TPLB3.AES.so.

  1. Перекомпилируйте и переустановите пакет времени разработки
  2. Откройте свой мобильный проект. Добавьте компоненты времени разработки для TCodec и TCryptographicLibrary в свои формы Android. Действуйте так же, как для приложения Windows.
person Sean B. Durkin    schedule 13.01.2015