Подтвердить что ты не робот

Как создать хром файл crx программно (желательно в java)?

Я хочу создать хром-расширение crx файла программно (не используя chrome.exe, потому что он открывает новое хромированное окно). Итак, каковы альтернативы для этого? Я предпочитаю java, но если это возможно на другом языке, тогда и я в порядке.

4b9b3361

Ответ 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;
    }