Я хочу создать хром-расширение crx файла программно (не используя chrome.exe, потому что он открывает новое хромированное окно). Итак, каковы альтернативы для этого? Я предпочитаю java, но если это возможно на другом языке, тогда и я в порядке.
Как создать хром файл crx программно (желательно в java)?
Ответ 1
Для этого существует множество утилит на разных языках (хотя, в основном, это языки с оболочкой/скриптами)
Я не могу опубликовать ссылки на все из них, потому что я новый пользователь stackoverflow - я могу опубликовать только 1 ссылку, поэтому я создал страницу, в которой перечислены все они - включая один C, о котором я говорю ниже - http://curetheitch.com/projects/buildcrx/6/
В любом случае, я провел несколько часов и собрал версию на C, которая работает в Windows или Linux, так как другим решениям требуется установка языка сценариев или оболочки (например, python, ruby, bash и т.д.) и OpenSSL. Утилита, которую я написал, имеет OpenSSL, статически связанный, поэтому нет требований к интерпретатору или библиотеке.
Репозиторий размещен на github, но ссылка выше содержит список моих решений для коммунальных служб и других людей.
Ничего не указано для Java, которое было вашим предпочтением, но, надеюсь, это поможет!
Ответ 2
Как сказал kylehuff, есть внешние инструменты, которые вы могли бы использовать. Но вы всегда можете использовать командную строку из Google Chrome, чтобы сделать кросс-платформу (Linux/Windows/Mac).
chrome.exe --pack-extension=[extension_path] --pack-extension-key=[extension_key]
- расширение пакета:
Пакет расширения для устанавливаемого файла .crx из заданного каталога.
- пакет-расширение-ключ:
Дополнительный закрытый ключ PEM должен использоваться при подписании упакованного .crx.
Вышеупомянутый не запускает Google Chrome, это просто упаковка командной строки с использованием алгоритма Chromium core crx, который они используют внутри.
Ответ 3
//Method to generate .crx. signature
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.Signature;
//@param : extenstionContents is your zip file ,
//@returns : byte[] of the signature , use ByteBuffer to merge them and you have your
// .crx
public static byte[] generateCrxHeader(byte[] extensionContents) throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = new SecureRandom();
keyGen.initialize(1024, random);
KeyPair pair = keyGen.generateKeyPair();
Signature sigInstance = Signature.getInstance("SHA1withRSA");
sigInstance.initSign(pair.getPrivate());
sigInstance.update(extensionContents);
byte [] signature = sigInstance.sign();
byte [] subjectPublicKeyInfo = pair.getPublic().getEncoded();
final int headerLength = 4 + 4 + 4 + 4 + subjectPublicKeyInfo.length + signature.length;
ByteBuffer headerBuf = ByteBuffer.allocate(headerLength);
headerBuf.order(ByteOrder.LITTLE_ENDIAN);
headerBuf.put(new byte[]{0x43,0x72,0x32,0x34}); // Magic number
headerBuf.putInt(2); // Version
headerBuf.putInt(subjectPublicKeyInfo.length); // public key length
headerBuf.putInt(signature.length); // signature length
headerBuf.put(subjectPublicKeyInfo);
headerBuf.put(signature);
final byte [] header = headerBuf.array();
return header;
}