本文整理汇总了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();
}
示例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;
}
示例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();
}
示例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);
}
}
示例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);
}
示例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;
}
}
示例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>();
}
示例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();
}
示例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);
}
示例10: BuilderMutableMethodImplementation
import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public BuilderMutableMethodImplementation(DexBuilder dexBuilder, int registerCount) {
this.dexBuilder = dexBuilder;
this.registerCount = registerCount;
}
示例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();
}
示例12: getBelongingFile
import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
protected DexBuilder getBelongingFile() {
return belongingFile;
}
示例13: DexPrinter
import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public DexPrinter() {
dexFile = DexBuilder.makeDexBuilder(19);
//dexAnnotation = new DexAnnotation(dexFile);
}
示例14: ConstantVisitor
import org.jf.dexlib2.writer.builder.DexBuilder; //导入依赖的package包/类
public ConstantVisitor(DexBuilder dexFile, StmtVisitor stmtV) {
this.stmtV = stmtV;
this.dexFile = dexFile;
}
示例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;
}