2010-07-07 11 views
12

Tôi muốn tạo tệp crx tiện ích mở rộng chrome theo lập trình (không sử dụng chrome.exe, vì nó mở cửa sổ chrome mới). Vì vậy, các lựa chọn thay thế cho cùng một là gì? Sở thích của tôi là java, nhưng nếu có thể bằng ngôn ngữ khác thì tôi cũng ổn.Làm thế nào để tạo tập tin crx chrome lập trình (tốt nhất là trong java)?

+0

Tôi đã có một vấn đề tương tự, đây là giải pháp: http://stackoverflow.com/questions/24661167/generating-chrome-packaged-app-crx-header-with-java/24675290 # 24675290 – JavaHead

Trả lời

12

Có một loạt các tiện ích để làm điều này, bằng các ngôn ngữ khác nhau (mặc dù, họ chủ yếu là vỏ/ngôn ngữ kịch bản)

tôi không thể đăng các liên kết đến tất cả trong số họ, vì tôi là một người sử dụng stackoverflow mới - Tôi chỉ có thể đăng 1 liên kết, vì vậy tôi đã tạo một trang liệt kê tất cả chúng - bao gồm cả trang C mà tôi nói về bên dưới - http://curetheitch.com/projects/buildcrx/6/

Dù sao, tôi đã dành một vài giờ và đặt cùng một phiên bản trong C chạy trên Windows hoặc Linux, vì các giải pháp khác yêu cầu cài đặt ngôn ngữ kịch bản hoặc trình bao (tức là python, ruby, bash, v.v.) và OpenSSL. Tiện ích tôi viết có OpenSSL được liên kết tĩnh nên không có yêu cầu về thông dịch viên hoặc thư viện.

Kho lưu trữ được lưu trữ trên github, nhưng liên kết ở trên có danh sách tiện ích của tôi và các giải pháp của người khác.

Không có gì được liệt kê cho Java, đó là sở thích của bạn, nhưng hy vọng điều đó sẽ hữu ích!

+0

Chính xác những gì tôi đang tìm kiếm. Cám ơn. –

+0

Tôi biết điều này là cũ, nhưng điều này đã giúp tôi rất nhiều! – hawkfalcon

+3

Bạn có thể cập nhật câu trả lời của mình với các liên kết thực tế khi bạn không còn là người dùng mới nữa không? –

18

Như kylehuff đã nêu, có các công cụ bên ngoài mà bạn có thể sử dụng. Nhưng bạn luôn có thể sử dụng dòng lệnh từ Google Chrome để làm điều đó là nền tảng chéo (Linux/Windows/Mac).

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

--pack-mở rộng là:

Gói một phần mở rộng vào một tập tin cài đặt .crx từ một thư mục nhất định.

--pack-mở rộng-key là:

Tùy chọn PEM khóa riêng là sử dụng trong việc ký kết .crx đóng gói.

Ở trên không chạy Google Chrome, nó chỉ là đóng gói dòng lệnh bằng thuật toán crx lõi của Chromium mà họ sử dụng trong nội bộ.

+9

Nếu bạn cũng sử dụng tùy chọn --no-message-box, quá trình này sẽ hoàn toàn im lặng, phù hợp để sử dụng trong tập lệnh. – Marten

+0

Tôi có mã trả lại là 21 nhưng không có tệp crx nào xung quanh. – Natim

+0

Bạn có thể cho tôi biết tập tin đầu ra ở đâu? –

1
//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; 
    } 
+0

Tôi nghĩ chữ ký và khóa công khai là tùy chọn bởi crx, nhưng không. Đó là thiếu câu đố cho giải pháp của tôi. –