我需要修改现有的APK,修改源代码然后重新编译它.
但是现在我想知道如何重新编译java文件并将它们放回到jar文件中!(jar部分应该很简单,主要问题似乎是如何为android重新编译java文件)
我知道另一种解决方案是使用apktool然后修改smali文件,但是当我们想要添加大量代码时,它似乎真的很复杂!
我的应用程序是一个基本的HelloWorld whitout混淆.
我一直在努力让make只编译已经编辑过的文件.但是我没有太大成功,所有文件都被重新编译.有人能解释一下为什么吗?
我的文件是:
main.c
a_functions.c
Run Code Online (Sandbox Code Playgroud)
其中main.c包含main.h 和a_functions.c包含啊
这是我的makefile:
CC=gcc
CFLAGS=-Wall -I. -c
EXEC_FILE=program1
all: program
a_functions.o: a_functions.c
a_functions.c: a.h
main.o: main.c
main.c: main.h
objects: a_functions.c main.c
$(CC) a_functions.c main.c $(CFLAGS)
program: a_functions.o main.o
$(CC) a_functions.o main.o -o $(EXEC_FILE)
Run Code Online (Sandbox Code Playgroud)
根据建议更改makefile似乎有同样的问题::
all: program
a_functions.o: a_functions.c a.h
gcc a_functions.c -c
main.o: main.c main.h
gcc main.c -c
program: a_functions.o main.o
gcc a_functions.o main.o -o program1
Run Code Online (Sandbox Code Playgroud) 如果我在运行时重新编译可执行文件会发生什么?操作系统在开始运行时是否将所有可执行文件的内容读入内存,因此它永远不会读取新的可执行文件?或者它会读取新的可执行文件的部分,认为它没有改变,导致可能未定义的行为?
如果我运行的脚本在循环中重复调用可执行文件,并且在脚本运行时重新编译可执行文件,该怎么办?是否保证循环的未来迭代将调用新的可执行文件,并且只有在进行切换时正在进行的调用的结果可能已损坏?
我的操作系统是Linux,但我也很好奇Windows上会发生什么.
我在一个大型Scala项目上工作,我们使用Git进行版本控制.我的工作流程是在我自己的分支中处理新功能并在需要时切换.各种版本的代码都在自己的分支中.一切都很标准.
如果我必须修复某个版本的代码中的错误,我将切换到正确的分支,修复错误,提交然后切换回我所在的位置.
问题是虽然git在我转到另一个分支后立即进行,我必须重新编译代码.这需要几分钟.然后修复bug,切换回我自己的分支并再做一次重新编译,这需要几分钟.这似乎打败了Git这么快的目的.
有人遇到过这种情况么?有没有办法解决它.我确定这不是Scala特定的问题(尽管Scala在编译时速度很慢).
3年多后更新
在过去的几年里,我一直在使用@djs的答案(git-new-workdir).它对我来说非常好用.我有一个主目录和几个其他目录(如生产,下一个发布等),当我需要在那里工作时,我切换到.开销非常小,这意味着您可以快速切换到说,生产,测试某些东西,然后切换回您正在处理的内容.
更新7年以后
看起来git-worktree是git-new-workdir的替代品.使用:
cd ~/git/my-repo
git worktree add ~/git/my-linked-repo
Run Code Online (Sandbox Code Playgroud) 我需要更改.NET DLL的代码.我可以通过使用.NET反射器编译DLL来查看代码,但我无法更改DLL的代码.使用.NET Reflector,我反编译代码并保存到我的硬盘中,但是当我能够重新编译代码时,它会给出错误.
很少有代码以二进制格式反编译,很少有代码用c#反编译.是否有任何工具可以更改和重新编译DLL?
以下是我用来尝试反编译DLL的工具:
不幸的是,没有一个工具能够提供完美的源代码来重新编译DLL代码.
我做make时遇到这个错误:
relocation R_X86_64_32 against `vtable for Torch::MemoryDataSet' can not be used
when making a shared object; recompile with -fPIC
Run Code Online (Sandbox Code Playgroud)
它说我应该重新编译-fPIC选项.我这样做,将-fPIC选项添加到CFLAGS和CXXFLAGS,但我仍然得到相同的错误.有什么方法可以解决这个问题吗?我已经看到这个问题与使用64位机器有关,而且我确实使用了一个.
我遇到了应用程序apktool问题非常烦人的问题.我不明白我做错了什么,或者问题是什么.我在debian和linux薄荷上试过这个.我使用了不同版本的apktool,
导致同样的错误:
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
Exception in thread "main" brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, -F, /tmp/APKTOOL3630495287059303807.tmp, -I, /home/awesomename/apktool/framework/1.apk, -S, /home/awesomename/out/./res, -M, /home/awesomename/out/./AndroidManifest.xml]
at brut.androlib.res.AndrolibResources.aaptPackage(Unknown Source)
at brut.androlib.Androlib.buildResourcesFull(Unknown Source)
at brut.androlib.Androlib.buildResources(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.apktool.Main.cmdBuild(Unknown Source)
at brut.apktool.Main.main(Unknown Source)
Caused by: brut.common.BrutException: could not exec command: [aapt, p, -F, /tmp/APKTOOL3630495287059303807.tmp, -I, /home/windows/apktool/framework/1.apk, -S, /home/windows/out/./res, -M, /home/windows/out/./AndroidManifest.xml]
at brut.util.OS.exec(Unknown Source)
... 7 …Run Code Online (Sandbox Code Playgroud) 我碰巧在我的工作场所遇到过Java代码.这是场景:有两个类 - ClassA和ClassB.
ClassA除了4个公共静态最终字符串值之外什么都没有.它的目的是使用那些值ClassA.variable(不要问我为什么,这不是我的代码).
ClassB进口ClassA.我编辑了字符串值ClassA并对其进行了编译.当我跑步时,ClassB我可以看到它使用的是旧值 - 而不是新值.我必须重新编译ClassB才能使用新的值ClassA!(我不得不重新编译其他导入的类ClassA!)
这只是因为JDK 1.6或我之前应该知道重新编译的ClassB!开导我.:)
是否可以使用x86 32位代码的输入运行LLVM编译器?有一个庞大的算法,我没有源代码,我想让它在相同的硬件上运行得更快.我可以通过优化将它从x86转换回x86.
这段代码运行时间很长,所以我想对它进行静态重新编译.此外,我可以执行它的运行时配置文件并提供LLVM提示,哪些分支更可能.
原始代码是为x86 + x87编写的,不使用SSE/MMX/SSE2.重新编译后,它有机会使用x86_64和/或SSE3.此外,代码将以更优化的方式再生到硬件解码器.
谢谢.
我对WITH RECOMPILE存储过程选项的理解通常仅限于使用带有单个存储过程调用的子句作为尾随参数:
exec sp_mystoredproc 'Parameter1', 2, '1/28/2011' with recompile
Run Code Online (Sandbox Code Playgroud)
包含WITH RECOMPILE在实际proc定义中有什么影响?这会在每次执行时重新编译proc吗?或者只是下次更改过程?
例:
CREATE PROCEDURE [dbo].[sp_mystoredproc]
(@string1 varchar(8000)
,@int2 int = 2
,@dt_begin DATETIME
with recompile
AS
... proc code ...
Run Code Online (Sandbox Code Playgroud) recompile ×10
java ×2
makefile ×2
android ×1
branch ×1
build ×1
c ×1
c# ×1
decompiler ×1
decompiling ×1
dll ×1
executable ×1
final ×1
fpic ×1
git ×1
git-worktree ×1
linux ×1
llvm ×1
public ×1
scala ×1
sql-server ×1
static ×1
t-sql ×1
windows ×1
x86 ×1