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)?
Trả lời
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!
Chính xác những gì tôi đang tìm kiếm. Cám ơn. –
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
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? –
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ộ.
//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;
}
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. –
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