Как создать файл chrome crx программно (желательно в Java)? - PullRequest
12 голосов
/ 07 июля 2010

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

Ответы [ 3 ]

23 голосов
/ 11 октября 2010

Как сказал kylehuff, есть внешние инструменты, которые вы можете использовать.Но вы всегда можете использовать командную строку из Google Chrome для выполнения кроссплатформенного (Linux / Windows / Mac).

chrome.exe --pack-extension=[extension_path] --pack-extension-key=[extension_key]

- расширение пакета равно:

Пакет расширения для устанавливаемого файла .crx из данного каталога.

- ключ расширения пакета :

Необязательный закрытый ключ PEM используется для подписи упакованного .crx.

Вышеприведенное не запускает Google Chrome, это просто упаковка командной строки с использованием основного алгоритма crx Chromium, который они используют внутри.

13 голосов
/ 11 октября 2010

Существует множество утилит для этого на разных языках (хотя они в основном являются языками оболочки / сценариев)

Я не могу опубликовать ссылки на все из них, потому что я новый пользователь stackoverflow- Я могу опубликовать только одну ссылку, поэтому я создал страницу, в которой перечислены все из них - включая одну C, о которой я говорю ниже - http://curetheitch.com/projects/buildcrx/6/

В любом случае, я потратил несколько часов и собрал версию вC, работающий в Windows или Linux, поскольку другие решения требуют установки языка сценариев или оболочки (например, python, ruby, bash и т. Д.) И OpenSSL.Утилита, которую я написал, статически связана с OpenSSL, поэтому нет требований к интерпретатору или библиотеке.

Хранилище размещено на github, но по ссылке выше приведен список моих утилит и других решений.

Ничего не перечислено для Java, что было вашим предпочтением, но, надеюсь, это поможет!

2 голосов
/ 11 июля 2014
//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;
    }
...