Skip to content

Latest commit

 

History

History
99 lines (81 loc) · 3.51 KB

README.md

File metadata and controls

99 lines (81 loc) · 3.51 KB

Travis build status AppVeyor build status Maven Central

crxtool

Library for packing and unpacking Chrome extension .crx files.

Core Library

Maven Coordinates

<dependency>
    <groupId>com.github.mike10004</groupId>
    <artifactId>crxtool-core</artifactId>
    <version>0.15</version>
</dependency>

Usage

Unpacking

try (InputStream in = new FileInputStream("my_extension.crx") {
    CrxMetadata metadata = CrxParser.getDefault().parseMetadata(in);
    System.out.println("id = " + metadata.getId());
    // handle remainder of stream as a zip archive
    try (ZipInputStream zin = new ZipInputStream(in)) {
        // ...
    }
}

Packing

Path extensionDir = new File("manifest-parent-dir").toPath();
java.security.KeyPairGenerator keyGen = java.security.KeyPairGenerator.getInstance("RSA");
java.security.SecureRandom random = new java.security.SecureRandom();
keyGen.initialize(1024, random);
java.security.KeyPair keyPair = keyGen.generateKeyPair();
try (OutputStream out = new FileOutputStream("new_extension.crx")) {
    CrxPacker.getDefault().packExtension(extensionDir, keyPair, out);
}

Maven Plugin

Maven Coordinates

<plugin>
    <groupId>com.github.mike10004</groupId>
    <artifactId>crxtool-maven-plugin</artifactId>
    <version>0.15</version>
</plugin>

Usage

Place extension source files in src/main/extension.

<build>
    <plugins>
        <plugin>
            <groupId>com.github.mike10004</groupId>
            <artifactId>crxtool-maven-plugin</artifactId>
            <version>0.15</version>
            <executions>
                <execution>
                    <id>pack</id>
                    <goals>
                        <goal>pack-extension</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>attach-artifact</id>
                    <goals>
                        <goal>attach-artifact</goal>
                    </goals>
                    <configuration>
                        <artifacts>
                            <artifact>
                                <file>${project.build.directory}/${project.artifactId}-${project.version}.crx</file>
                                <type>crx</type>
                            </artifact>
                        </artifacts>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Credits

The extension ID construction is probably from this Stack Overflow answer. The make-page-red example extension file in the test resources is from developer.chrome.com.