Examples of DexBuilder


Examples of org.jf.dexlib2.writer.builder.DexBuilder

import java.util.List;

public class JumboStringConversionTest {
    @Test
    public void testJumboStringConversion() throws IOException {
        DexBuilder dexBuilder = DexBuilder.makeDexBuilder(15);

        MethodImplementationBuilder methodBuilder = new MethodImplementationBuilder(1);
        for (int i=0; i<66000; i++) {
            methodBuilder.addInstruction(new BuilderInstruction21c(Opcode.CONST_STRING, 0,
                    dexBuilder.internStringReference(String.format("%08d", i))));
        }
        methodBuilder.addInstruction(new BuilderInstruction10x(Opcode.RETURN_VOID));

        dexBuilder.internClassDef(
                "Ltest;",
                0,
                "Ljava/lang/Object;",
                null,
                null,
                ImmutableSet.<Annotation>of(),
                null,
                ImmutableList.of(
                        dexBuilder.internMethod(
                                "Ltest;",
                                "test",
                                null,
                                "V",
                                0,
                                ImmutableSet.<Annotation>of(),
                                methodBuilder.getMethodImplementation())));

        MemoryDataStore dexStore = new MemoryDataStore();
        dexBuilder.writeTo(dexStore);

        DexBackedDexFile dexFile = new DexBackedDexFile(new Opcodes(15), dexStore.getData());

        ClassDef classDef = Iterables.getFirst(dexFile.getClasses(), null);
        Assert.assertNotNull(classDef);
View Full Code Here

Examples of org.jf.dexlib2.writer.builder.DexBuilder

    }


    @Test
    public void testJumboStringConversion_NonMethodBuilder() throws IOException {
        DexBuilder dexBuilder = DexBuilder.makeDexBuilder(15);

        final List<Instruction> instructions = Lists.newArrayList();
        for (int i=0; i<66000; i++) {
            final StringReference ref = dexBuilder.internStringReference(String.format("%08d", i));

            instructions.add(new Instruction21c() {
                @Override public int getRegisterA() {
                    return 0;
                }

                @Nonnull @Override public Reference getReference() {
                    return ref;
                }

                @Override public int getReferenceType() { return ReferenceType.STRING; }

                @Override public Opcode getOpcode() {
                    return Opcode.CONST_STRING;
                }

                @Override public int getCodeUnits() {
                    return getOpcode().format.size / 2;
                }
            });
        }
        instructions.add(new ImmutableInstruction10x(Opcode.RETURN_VOID));

        MethodImplementation methodImpl = new MethodImplementation() {
            @Override public int getRegisterCount() {
                return 1;
            }

            @Nonnull @Override public Iterable<? extends Instruction> getInstructions() {
                return instructions;
            }

            @Nonnull @Override public List<? extends TryBlock<? extends ExceptionHandler>> getTryBlocks() {
                return ImmutableList.of();
            }

            @Nonnull @Override public Iterable<? extends DebugItem> getDebugItems() {
                return ImmutableList.of();
            }
        };

        dexBuilder.internClassDef(
                "Ltest;",
                0,
                "Ljava/lang/Object;",
                null,
                null,
                ImmutableSet.<Annotation>of(),
                null,
                ImmutableList.of(
                        dexBuilder.internMethod(
                                "Ltest;",
                                "test",
                                null,
                                "V",
                                0,
                                ImmutableSet.<Annotation>of(),
                                methodImpl)));

        MemoryDataStore dexStore = new MemoryDataStore();
        dexBuilder.writeTo(dexStore);

        DexBackedDexFile dexFile = new DexBackedDexFile(new Opcodes(15), dexStore.getData());

        ClassDef classDef = Iterables.getFirst(dexFile.getClasses(), null);
        Assert.assertNotNull(classDef);
View Full Code Here

Examples of org.jf.dexlib2.writer.builder.DexBuilder

                }
            }

            boolean errors = false;

            final DexBuilder dexBuilder = DexBuilder.makeDexBuilder(apiLevel);
            ExecutorService executor = Executors.newFixedThreadPool(jobs);
            List<Future<Boolean>> tasks = Lists.newArrayList();

            final boolean finalVerboseErrors = verboseErrors;
            final boolean finalPrintTokens = printTokens;
            final boolean finalAllowOdex = allowOdex;
            final int finalApiLevel = apiLevel;
            for (final File file: filesToProcess) {
                tasks.add(executor.submit(new Callable<Boolean>() {
                    @Override public Boolean call() throws Exception {
                        return assembleSmaliFile(file, dexBuilder, finalVerboseErrors, finalPrintTokens,
                                finalAllowOdex, finalApiLevel);
                    }
                }));
            }

            for (Future<Boolean> task: tasks) {
                while(true) {
                    try {
                        if (!task.get()) {
                            errors = true;
                        }
                    } catch (InterruptedException ex) {
                        continue;
                    }
                    break;
                }
            }

            executor.shutdown();

            if (errors) {
                System.exit(1);
            }

            dexBuilder.writeTo(new FileDataStore(new File(outputDexFile)));
        } catch (RuntimeException ex) {
            System.err.println("\nUNEXPECTED TOP-LEVEL EXCEPTION:");
            ex.printStackTrace();
            System.exit(2);
        } catch (Throwable ex) {
View Full Code Here

Examples of org.jf.dexlib2.writer.builder.DexBuilder

public class SmaliTestUtils {
    public static ClassDef compileSmali(String smaliText) throws RecognitionException, IOException {
        CommonTokenStream tokens;
        LexerErrorInterface lexer;
        DexBuilder dexBuilder = DexBuilder.makeDexBuilder(15);

        Reader reader = new StringReader(smaliText);

        lexer = new smaliFlexLexer(reader);
        tokens = new CommonTokenStream((TokenSource)lexer);

        smaliParser parser = new smaliParser(tokens);
        parser.setVerboseErrors(true);
        parser.setAllowOdex(false);
        parser.setApiLevel(15);

        smaliParser.smali_file_return result = parser.smali_file();

        if(parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
            throw new RuntimeException("Error occured while compiling text");
        }

        CommonTree t = result.getTree();

        CommonTreeNodeStream treeStream = new CommonTreeNodeStream(t);
        treeStream.setTokenStream(tokens);

        smaliTreeWalker dexGen = new smaliTreeWalker(treeStream);
        dexGen.setVerboseErrors(true);
        dexGen.setDexBuilder(dexBuilder);
        dexGen.smali_file();

        if (dexGen.getNumberOfSyntaxErrors() > 0) {
            throw new RuntimeException("Error occured while compiling text");
        }

        MemoryDataStore dataStore = new MemoryDataStore();

        dexBuilder.writeTo(dataStore);

        DexBackedDexFile dexFile = new DexBackedDexFile(new Opcodes(15), dataStore.getData());

        return Iterables.getFirst(dexFile.getClasses(), null);
    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.