Я хочу создать файл crx расширения chrome программно (не используя chrome.exe, потому что он открывает новое окно Chrome). Итак, каковы альтернативы для того же самого? Я предпочитаю java, но если это возможно на другом языке, то я тоже в порядке.
Как создать файл chrome crx программно (желательно в java)?
Ответы (4)
Для этого существует множество утилит на разных языках (хотя в основном это языки оболочки/скриптов).
Я не могу опубликовать ссылки на все из них, потому что я новый пользователь stackoverflow - я могу опубликовать только 1 ссылку, поэтому я создал страницу, на которой перечислены все, включая ту C, о которой я говорю ниже - http://curetheitch.com/projects/buildcrx/6/
В любом случае, я потратил несколько часов и собрал версию на C, которая работает в Windows или Linux, так как другие решения требуют установки языка сценариев или оболочки (например, python, ruby, bash и т. д.) и OpenSSL. Утилита, которую я написал, имеет статически связанный OpenSSL, поэтому нет требований к интерпретатору или библиотеке.
Репозиторий размещен на github, но по ссылке выше есть список моей утилиты и других решений.
Ничего не указано для Java, которую вы предпочли, но, надеюсь, это поможет!
Как сказал Кайлехафф, есть внешние инструменты, которые вы могли бы использовать. Но вы всегда можете использовать командную строку из Google Chrome, чтобы делать то, что является кросс-платформенным (Linux/Windows/Mac).
chrome.exe --pack-extension=[extension_path] --pack-extension-key=[extension_key]
--pack-extension:
Упакуйте расширение в установочный файл .crx из заданного каталога.
--pack-extension-key:
Необязательный закрытый ключ PEM используется для подписания упакованных файлов .crx.
Вышеприведенное не запускает Google Chrome, это просто упаковка командной строки с использованием основного алгоритма crx Chromium, который они используют внутри.
[extension_path]
. Файл создается в каталоге верхнего уровня. Например, команда chrome --pack-extension=/path/to/chrome-profile/Extensions/pehaalcefcjfccdpbckoablngfkfgfgj/1.1_0
создает файл по адресу /path/to/chrome-profile/Extensions/pehaalcefcjfccdpbckoablngfkfgfgj/1.1_0.crx
.
- person Johannes Barop; 29.11.2018
Мне нужно было сделать это в Ruby. Ответ JavaHead выглядит хорошо для Java для CRX2. Текущий формат — CRX v3, а заголовок основан на protobuf. Я написал блог для упаковки расширения с Руби. Существует также проект python от другого автора.
Я вставлю здесь Ruby-версию методов CRX2 и CRX3 для упаковки расширений для справки. Полный код смотрите в моем блоге.
Итак, метод CRX3:
def self.header_v3_extension(zipdata, key: nil)
key ||= OpenSSL::PKey::RSA.generate(2048)
digest = OpenSSL::Digest.new('sha256')
signed_data = Crx_file::SignedData.new
signed_data.crx_id = digest.digest(key.public_key.to_der)[0...16]
signed_data = signed_data.encode
signature_data = String.new(encoding: "ASCII-8BIT")
signature_data << "CRX3 SignedData\00"
signature_data << [ signed_data.size ].pack("V")
signature_data << signed_data
signature_data << zipdata
signature = key.sign(digest, signature_data)
proof = Crx_file::AsymmetricKeyProof.new
proof.public_key = key.public_key.to_der
proof.signature = signature
header_struct = Crx_file::CrxFileHeader.new
header_struct.sha256_with_rsa = [proof]
header_struct.signed_header_data = signed_data
header_struct = header_struct.encode
header = String.new(encoding: "ASCII-8BIT")
header << "Cr24"
header << [ 3 ].pack("V") # version
header << [ header_struct.size ].pack("V")
header << header_struct
return header
end
И для исторических целей (это проверено) CRX2:
# @note original crx2 format description https://web.archive.org/web/20180114090616/https://developer.chrome.com/extensions/crx
def self.header_v2_extension(zipdata, key: nil)
key ||= OpenSSL::PKey::RSA.generate(2048)
digest = OpenSSL::Digest.new('sha1')
header = String.new(encoding: "ASCII-8BIT")
signature = key.sign(digest, zipdata)
signature_length = signature.length
pubkey_length = key.public_key.to_der.length
header << "Cr24"
header << [ 2 ].pack("V") # version
header << [ pubkey_length ].pack("V")
header << [ signature_length ].pack("V")
header << key.public_key.to_der
header << signature
return header
end
Я воспользовался отличным сервисом crx-checker для проверки пакетов расширений v2 и v3. Где я получаю ожидаемую подпись RSASSA-PKCS1-v1_5
с пометкой (Signature OK) (Developer Signature)
.
Расширение не загрузится с CRX_REQUIRED_PROOF_MISSING
, если вы попытаетесь добавить его в свой браузер с URL-адреса, потому что у него не будет подписи Google. Но он будет нормально загружен Selenium при запуске теста. Для нормальной загрузки необходимо опубликовать в интернет-магазине.