当前位置: 首页>>代码示例>>Java>>正文


Java DexBuilder类代码示例

本文整理汇总了Java中org.jf.dexlib2.writer.builder.DexBuilder的典型用法代码示例。如果您正苦于以下问题:Java DexBuilder类的具体用法?Java DexBuilder怎么用?Java DexBuilder使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


DexBuilder类属于org.jf.dexlib2.writer.builder包,在下文中一共展示了DexBuilder类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: buildFile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
private void buildFile(String fileName, DexBuilder dexBuilder)
        throws AndrolibException, IOException {
    File inFile = new File(mSmaliDir, fileName);
    InputStream inStream = new FileInputStream(inFile);

    if (fileName.endsWith(".smali")) {
        try {
            if (!SmaliMod.assembleSmaliFile(inFile,dexBuilder, false, false)) {
                throw new AndrolibException("Could not smali file: " + fileName);
            }
        } catch (IOException | RecognitionException ex) {
            throw new AndrolibException(ex);
        }
    } else {
        LOGGER.warning("Unknown file type, ignoring: " + inFile);
    }
    inStream.close();
}
 
开发者ID:imkiva,项目名称:AndroidApktool,代码行数:19,代码来源:SmaliBuilder.java

示例2: buildCode

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public static Set<String> buildCode(File smaliDir, File dexFile, DexDiffInfo info) throws IOException,
        RecognitionException {
    Set<String> classes = new HashSet<String>();
    Set<DexBackedClassDef> classDefs = new HashSet<DexBackedClassDef>();
    classDefs.addAll(info.getModifiedClasses());
    classDefs.addAll(info.getAddedClasses());
    final ClassFileNameHandler outFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
    final ClassFileNameHandler inFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
    DexBuilder dexBuilder = DexBuilder.makeDexBuilder();
    File smaliFile;
    String className;
    for (DexBackedClassDef classDef : classDefs) {
        ApkPatch.currentClassType = classDef.getType();
        className = TypeGenUtil.newType(classDef.getType());
        AfBakSmali.disassembleClass(classDef, outFileNameHandler, getBuildOption(classDefs, 19), false, false);
        smaliFile = inFileNameHandler.getUniqueFilenameForClass(className);
        classes.add(className.substring(1, className.length() - 1).replace('/', '.'));
        SmaliMod.assembleSmaliFile(smaliFile, dexBuilder, true, true);
    }

    dexBuilder.writeTo(new FileDataStore(dexFile));

    return classes;
}
 
开发者ID:alibaba,项目名称:atlas,代码行数:25,代码来源:SmaliDiffUtils.java

示例3: buildFile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
private void buildFile(String fileName, DexBuilder dexBuilder)
        throws AndrolibException, IOException {
    File inFile = new File(mSmaliDir, fileName);
    InputStream inStream = new FileInputStream(inFile);

    if (fileName.endsWith(".smali")) {
    	if(isVerbose){
    		LOGGER.info("Smaling: " + fileName);
    	}
        try {
            if (!SmaliMod.assembleSmaliFile(inFile,dexBuilder, false, false)) {
                throw new AndrolibException("Could not smali file: " + fileName);
            }
        } catch (IOException | RecognitionException ex) {
            throw new AndrolibException(ex);
        }
    } else {
        LOGGER.warning("Unknown file type, ignoring: " + inFile);
    }
    inStream.close();
}
 
开发者ID:4455jkjh,项目名称:apktool-android,代码行数:22,代码来源:SmaliBuilder.java

示例4: build

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
private void build() throws AndrolibException {
    try {
        DexBuilder dexBuilder = DexBuilder.makeDexBuilder();

        for (String fileName : mSmaliDir.getDirectory().getFiles(true)) {
            buildFile(fileName, dexBuilder);
        }
        dexBuilder.writeTo(new FileDataStore( new File(mDexFile.getAbsolutePath())));
    } catch (IOException | DirectoryException ex) {
        throw new AndrolibException(ex);
    }
}
 
开发者ID:imkiva,项目名称:AndroidApktool,代码行数:13,代码来源:SmaliBuilder.java

示例5: assembleSmaliFile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public static boolean assembleSmaliFile(InputStream is,DexBuilder dexBuilder, boolean verboseErrors,
                                        boolean printTokens, File smaliFile) throws IOException, RecognitionException {

    // copy our filestream into a tmp file, so we don't overwrite
    File tmp = File.createTempFile("BRUT",".bak");
    tmp.deleteOnExit();

    OutputStream os = new FileOutputStream(tmp);
    IOUtils.copy(is, os);
    os.close();

    return assembleSmaliFile(tmp,dexBuilder, verboseErrors, printTokens);
}
 
开发者ID:imkiva,项目名称:AndroidApktool,代码行数:14,代码来源:SmaliMod.java

示例6: assembleSmaliFile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
/**
 * 将smali文件夹转换为dex文件
 * @param smaliFolder
 * @param outDexFile
 * @return
 */
public static boolean assembleSmaliFile(File smaliFolder,File outDexFile) throws IOException, RecognitionException {
    Collection<File> smaliFiles =  FileUtils.listFiles(smaliFolder, new String[]{"smali"}, true);
    if(null!= smaliFiles && smaliFiles.size() > 0){
        DexBuilder dexBuilder = DexBuilder.makeDexBuilder();
        for(File smaliFile:smaliFiles){
            SmaliMod.assembleSmaliFile(smaliFile, dexBuilder, true, true);
        }
        dexBuilder.writeTo(new FileDataStore(outDexFile));
        return true;
    }else{
        return false;
    }
}
 
开发者ID:alibaba,项目名称:atlas,代码行数:20,代码来源:SmaliUtils.java

示例7: StmtVisitor

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public StmtVisitor(SootMethod belongingMethod, DexBuilder belongingFile) {
	this.belongingMethod = belongingMethod;
	this.belongingFile = belongingFile;
	constantV = new ConstantVisitor(belongingFile, this);
	regAlloc = new RegisterAllocator();
	exprV = new ExprVisitor(this, constantV, regAlloc, belongingFile);
	insns = new ArrayList<Insn>();
	switchPayloads = new ArrayList<SwitchPayload>();
}
 
开发者ID:flankerhqd,项目名称:JAADAS,代码行数:10,代码来源:StmtVisitor.java

示例8: ExprVisitor

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public ExprVisitor(StmtVisitor stmtV, ConstantVisitor constantV,
		RegisterAllocator regAlloc, DexBuilder dexFile) {
	this.dexFile = dexFile;
	this.stmtV = stmtV;
	this.constantV = constantV;
	this.regAlloc = regAlloc;

	regAlloc.resetImmediateConstantsPool();
}
 
开发者ID:flankerhqd,项目名称:JAADAS,代码行数:10,代码来源:ExprVisitor.java

示例9:

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
protected static BuilderFieldReference toFieldReference
   		(SootField f, DexBuilder belongingDexFile) {
   	FieldReference fieldRef = new ImmutableFieldReference
   			(SootToDexUtils.getDexClassName(f.getDeclaringClass().getName()),
   			f.getName(),
   			SootToDexUtils.getDexTypeDescriptor(f.getType()));
   	return belongingDexFile.internFieldReference(fieldRef);
}
 
开发者ID:flankerhqd,项目名称:JAADAS,代码行数:9,代码来源:DexPrinter.java

示例10: BuilderMutableMethodImplementation

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public BuilderMutableMethodImplementation(DexBuilder dexBuilder, int registerCount) {
    this.dexBuilder = dexBuilder;
    this.registerCount = registerCount;
}
 
开发者ID:weiwenqiang,项目名称:GitHub,代码行数:5,代码来源:BuilderMutableMethodImplementation.java

示例11: compile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public static byte[] compile(List<String> smaliTexts, int apiLevel)
    throws RecognitionException, IOException {
  DexBuilder dexBuilder = new DexBuilder(Opcodes.forApi(apiLevel));

  for (String smaliText : smaliTexts) {
    Reader reader = new StringReader(smaliText);

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

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

    smaliParser.smali_file_return result = parser.smali_file();

    if (parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
      throw new RuntimeException(
          "Error occured while compiling text:\n" + StringUtils.join(smaliTexts, "\n"));
    }

    CommonTree t = result.getTree();

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

    smaliTreeWalker dexGen = new smaliTreeWalker(treeStream);
    dexGen.setApiLevel(apiLevel);
    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);

  // TODO(sgjesse): This returns the full backingstore from MemoryDataStore, which by default
  // is 1024k bytes. Our dex file reader does not complain though.
  return dataStore.getData();
}
 
开发者ID:inferjay,项目名称:r8,代码行数:47,代码来源:Smali.java

示例12: getBelongingFile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
protected DexBuilder getBelongingFile() {
	return belongingFile;
}
 
开发者ID:flankerhqd,项目名称:JAADAS,代码行数:4,代码来源:StmtVisitor.java

示例13: DexPrinter

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public DexPrinter() {
	dexFile = DexBuilder.makeDexBuilder(19);
	//dexAnnotation = new DexAnnotation(dexFile);
}
 
开发者ID:flankerhqd,项目名称:JAADAS,代码行数:5,代码来源:DexPrinter.java

示例14: ConstantVisitor

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public ConstantVisitor(DexBuilder dexFile, StmtVisitor stmtV) {
	this.stmtV = stmtV;
	this.dexFile = dexFile;
}
 
开发者ID:flankerhqd,项目名称:JAADAS,代码行数:5,代码来源:ConstantVisitor.java

示例15: assembleSmaliFile

import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
private static boolean assembleSmaliFile(File smaliFile, DexBuilder dexBuilder, boolean verboseErrors,
                                         boolean printTokens, boolean allowOdex, int apiLevel)
        throws Exception {
    CommonTokenStream tokens;

    LexerErrorInterface lexer;

    FileInputStream fis = new FileInputStream(smaliFile.getAbsolutePath());
    InputStreamReader reader = new InputStreamReader(fis, "UTF-8");

    lexer = new smaliFlexLexer(reader);
    ((smaliFlexLexer)lexer).setSourceFile(smaliFile);
    tokens = new CommonTokenStream((TokenSource)lexer);

    if (printTokens) {
        tokens.getTokens();
        
        for (int i=0; i<tokens.size(); i++) {
            Token token = tokens.get(i);
            if (token.getChannel() == smaliParser.HIDDEN) {
                continue;
            }

            System.out.println(smaliParser.tokenNames[token.getType()] + ": " + token.getText());
        }
    }

    smaliParser parser = new smaliParser(tokens);
    parser.setVerboseErrors(verboseErrors);
    parser.setAllowOdex(allowOdex);
    parser.setApiLevel(apiLevel);

    smaliParser.smali_file_return result = parser.smali_file();

    if (parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
        return false;
    }

    CommonTree t = result.getTree();

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

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

    return dexGen.getNumberOfSyntaxErrors() == 0;
}
 
开发者ID:YaphetsH,项目名称:ZJDroid,代码行数:51,代码来源:main.java


注:本文中的org.jf.dexlib2.writer.builder.DexBuilder类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。