如何把linux下编译好的程序整体打包

如何把linux下编译好的程序整体打包,第1张

1, 首先你这种想法是错误的,当你的文件编译过后就已经产生一个配置文件了,想把你编译好

的 安装程序装到其他linux系统上那简直太难了,你那个配置文件就必须的在此生成,所以你

这种打包的方法是不可取的。

2 想要在另外一台在安装,你就把原来没有安装的包拷贝过去,然后再编译,然后会产生配置文

件。

3 打包小知识:

tar -czvf filetargz 要压缩的文件

代表所有

一看android的源代码

1)将Apkdapk 用zip解压后,出现了一个classesdex文件

2014/02/19 19:42

2014/02/19 19:42

2014/02/19 15:35 1,656 AndroidManifestxml

2014/02/19 15:35 687,024 classesdex

2014/02/19 15:49

META-INF

2014/02/19 15:49

res

2014/02/19 15:35 2,200 resourcesarsc

2)进入到dex2jar目录中,运行情况如下:

D:\developer\tools\test_apk\dex2jar-00915>dex2jarbat "\Apkd(d2j)\classesd

ex"

this cmd is deprecated, use the d2j-dex2jar if possible

dex2jar version: translator-00915

dex2jar \Apkd(d2j)\classesdex -> \Apkd(d2j)\classes_dex2jarjar

Done

在apk所在的目录会出现 classes_dex2jarjar 文件。

3) 用JD-GUI对jar包进行查看,可以查看源文件

二反编译apk

1在 下载 APKTOOL中的三个文件(aaptexe、apktoolbat、apktooljar)解压缩到你的Windows安装目录下,以方便使用Dos命令

2012/12/06 11:44 854,016 aaptexe

2014/02/19 17:15 277,372 Apkdapk //示例用 apk文件

2012/12/23 23:39 92 apktoolbat

2013/02/03 02:37 2,655,843 apktooljar

2进入到apktoolbat所在的目录,运行:

apktool d Apkdapk decode_dir

反编译后,decode_dir目录下的内容如下:

2014/02/19 17:16 716 AndroidManifestxml

2014/02/19 17:16 237 apktoolyml

2014/02/19 17:18

build

2014/02/19 17:16

res

2014/02/19 17:16

smali

此时我可以查看原文件AndroidManifestxml了,也是查看smali源文件(是用smali语言写的,可以对照java看)。

三APKTOOL的使用

1)decode

该命令用于进行反编译apk文件,一般用法为

apktool d

代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayerapk

代表了反编译后的文件的存储位置,比如C:\MusicPlayer

如果你给定的已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令

apktool d –f

这样就会强行覆盖已经存在的文件

2)build

该命令用于编译修改好的文件,一般用法为

apktool b

这里的

就是刚才你反编译时输入的

(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

3)install-framework

该命令用于为APKTool安装特定的framework-resapk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

四smali与java源码对照,并做出相应的修改

java源代码:

import androidosBundle;

import androidappActivity;

import androidviewMenu;

import androidwidget;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

TextView a = (TextView)thisfindViewById(Ridtest) ;

asetText("raoliang");

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present

getMenuInflater()inflate(Rmenumain, menu);

return true;

}

}

对应的smali源代码:

class public Lali/text/apkd/MainActivity;

super Landroid/app/Activity;

source "MainActivityjava"

# direct methods

method public constructor ()V

locals 0

prologue

line 8

invoke-direct {p0}, Landroid/app/Activity;->()V

return-void

end method

# virtual methods

method protected onCreate(Landroid/os/Bundle;)V

locals 2

parameter "savedInstanceState"

prologue

line 12

invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

line 13

const/high16 v1, 0x7f03

invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->setContentView(I)V

line 14

const/high16 v1, 0x7f08

invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/TextView;

line 15

local v0, a:Landroid/widget/TextView;

const-string v1, "raoliang"

invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

line 16

return-void

end method

method public onCreateOptionsMenu(Landroid/view/Menu;)Z

locals 2

parameter "menu"

prologue

line 21

invoke-virtual {p0}, Lali/text/apkd/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;

move-result-object v0

const/high16 v1, 0x7f07

invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V

line 22

const/4 v0, 0x1

return v0

end method

通过对比可以看到,常量是没有必变的,可以根据的smali的语法,进行相应的修改

五3、打包、签名和安装修改后的apk

修改完了,就可以打包回apk了。执行以下命令:

apktool b decode_dir

在mygame目录下的dist在会看到打包好的apk。

当然,现在一般是无法安装的,因为apk还没有签名。下面就来签名。签名需要keystore文件,我已经有专用的keystore了,如果还没有,请参阅这里进行生成。

执行以下命令为重新编译的my_gameapk签名:

jarsigner -verbose -keystore demokeystore Apkdapk demokeystore

最后,在安装到手机前,需要把手机中的已有版本先卸载,因为如果签名不同,是不能覆盖安装的,会提示“应用程序未安装”错误。

完整的运行情况如下:

D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demokeystore -keyalg RSA -validity 40000 -keystore demokeystore

输入keystore密码:

再次输入新密码:

您的名字与姓氏是什么?

[Unknown]: rao

您的组织单位名称是什么?

[Unknown]: rao

您的组织名称是什么?

[Unknown]:

您所在的城市或区域名称是什么?

[Unknown]:

您所在的州或省份名称是什么?

[Unknown]:

该单位的两字母国家代码是什么

[Unknown]:

CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?

[否]: y

输入的主密码

(如果和 keystore 密码相同,按回车):

D:\developer\tools\test_apk\new\decode\dist>jarsigner -verbose -keystore demokeystore Apkdapk demokeystore

输入密钥库的口令短语:

正在添加: META-INF/MANIFESTMF

正在添加: META-INF/DEMO_KEYSF

正在添加: META-INF/DEMO_KEYRSA

正在签名: res/drawable-hdpi/ic_launcherpng

正在签名: res/drawable-mdpi/ic_launcherpng

正在签名: res/drawable-xhdpi/ic_launcherpng

正在签名: res/drawable-xxhdpi/ic_launcherpng

正在签名: res/layout/activity_mainxml

正在签名: res/menu/mainxml

正在签名: AndroidManifestxml

正在签名: classesdex

正在签名: resourcesarsc

D:\developer\tools\test_apk\new\decode\dist>

到此为止,修改后的apk可以正常的安装了,不过,在安装之前,必须要先卸载以前的apk,不能直接替换(因为签名不一样)

总体思路是先打成jar再把jar打成exe。主要看13和23里的内容就可以了。

1.将项目打成jar:

11要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可以用Eclipse的Export生成jar。经过尝试后,我不推荐用Ant打包,因为要自己编写xml脚本语言,还要增加一些外部的jar,所以我打了好几次都没打成。

12在这里介绍两种方法生成jar,第一种是用Eclpise的Export功能。在要打包的项目上击右键,选择Export,在窗口中选择Java里的JARfile。Next后的窗口中已经自动选好了要打包的项目,用户可以点击加号查看项目里被打包的内容。在下面的JARfile里设置你打包生成jar文件的输出目录,下一步在出现的窗口中选择Useexistingmanifestfromworkspace,在下面的Mainclass后面直接点Browse,它会自动列出你项目中有主函数main的类。选择主类后点Finish即可生成jar文件。在此说明一下,这种打包方法不能把项目中的外部的jar包打进来,因该是也要编写一些脚本语言,没往深研究。所以生成后的jar有些是不能执行的。

13第二种方法是利用Eclipse的一个第三方插件fatjar生成jar文件,也是本人觉得最简单最方便的一种生成方式。先从网上下载些插件,解压后是一个plugins的文件夹,里面只有一个文件夹,我的“netsffjepfatjar_0024”将它copy到Eclipserplugins文件夹下,此插件就安装成功了,重启Eclipse在项目上右击就会看到多出一个“BuildFatJar”在前面有个绿色的“”号,这时你就可以用此插件打包你的项目了。进去后第一个界面Jar-Name里增入要生成的jar文件名,我的是“CAMP_fatjar”。在Main-Class后点Browse像Export一样它也会列出你项目中的主类,选择后其它默认即可,Next后会列出你要打包的所有内容,这个插件的优势就是可以将你项目中的外部jar也打进来,有三个先项,其中ExportANT是生成buildxml脚本文件,方便用户以后修改脚本,其它两个按钮没用。在这里什么都不点,直接点Finish就可以生成jar文件。

2将jar打成exe文件:

21虽然此时的jar文件已经可以执行了。生成exe的文件我也是用两种方法实现的,用到的打包工具是j2ewiz和exe4j,它们的不同会在我下面的介绍中体现出来。

22首先是j2ewiz,这个软件是绿色的,不用安装,解压后可以直接运行,但这个软件生成的exe文件不是跨平台的。运行此程序首先就是输入要打包的jar文件,我们浏览JAR选择我们之前用fatjar生成的“CAMP_fatjar”项目文件(详见13),下面那个选项是提示用户最低要求的JRE版本,一般选13。下一步,因为我们的寝室管理系统是图形界面,所以在这里选“Windows窗口程序”下一步它也是自动生成要执行的主类,你只要选择就可以。下面的选框可以选择你启动程序显示的。下一步后这个窗可按个人喜好选择。下一步,如果你的程序还有什么依赖的外部jar文件,可以从这里加上,但因为之前的fatjar以经将我们项目所用的那三个连数据库的外部类打进CAMP_fatjar包里了,所以这里不用再添加。如果你之前是用Export打的jar包,那么这里就需要再把那个三个数据库的包加进来了(详见12)。下一步是添入要生成的exe文件名,再选一个程序图标就可以了,下一步后生成exe文件,点完成。双击生成的exe文件就能看到运行效果了,这种exe文件还没有脱离JDK环境,还不能跨平台使用,只能用于小组成员测试使用。

23=下面进入最关键的,如何打包跨平台的exe文件。用到的软件是exe4j,我用的是V40版的,此软件需要破解。安装后运行左窗窗口标有十步,其实打包过程也非常简单。第一步完全略过,直接点Next第二步我们选择“JAR

inEXEmode”就是选择我们已经有制作好的jar文件。第3步上面是项目名称,可随便填写,下面一个写出你想要将打包后的exe文件输出的目录我的是“桌面project”。第4步,由于我的演示程序是图形的,所以选第一个,如果你的程序是控制台的,则选择第二个,Executablename写你将要生成的exe文件的名字,IconFile可以选择生成文件的图标。第5步,先别管上面的,先在下面单击绿色的“”号,在d出的窗口中点Archive,然后找到起初已经做好的CAMP_fatjar(详见13)文件,"OK"后返回,在下面的ClassPath里就出现jar文件路径后,再在上面MainClass栏内点击找到main所在的类。第6步,你系统的JRE版本,一般是填个13,下面填16在这里单击advancedoptions,选择searchsequence。选这个就是因为我们要把JDK环境也打包进来,好让程序能跨平台使用。首先要从你系统的JDK下的JRE目录copy到你exe文件的输出目录下“桌面projectJRE”,然后回到exe4j中在d出窗口删除列表中的所有项。我的是三项,一个注册表的,一个JAVA环境变量的,一个JDK环境变量的,都不要。然后单击绿“”,选择directory并选择JRE的根目录,我的是“桌面projectJRE”就是copy后的目录,选完后exe4jd出窗口中的Directory里会显示“JRE”。点OK关闭该窗口,返回exe4j的主窗口,你就可以看到刚加的路径。再从主窗口左侧窗口中单击advancedoptions,并选择preferredVM,在d出的窗口中选择clienthostspotVM,单击next按钮继续。7、8步是一些个性设置默认即可。第9步编译完后第10步你点那个“ClickHeretoStarttheApplication”按钮就可以看到程序运行效果了,然后再点”Seaveas”保存一个exe4j生成的一个文件,随便存哪里都行,和我们的exe程序无关。全部制作过程就完工了。

以上就是关于如何把linux下编译好的程序整体打包全部的内容,包括:如何把linux下编译好的程序整体打包、如何反编译android应用并重新打包、java应用程序怎样打包成可jar执行程序(java打包成可执行文件)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10071612.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存