当前位置:首页 » 安卓系统 » android应用程序打包

android应用程序打包

发布时间: 2022-06-21 21:24:41

Ⅰ 如何反编译android应用并重新打包

一.看android的源代码

1)将Apkd.apk 用zip解压后,出现了一个classes.dex文件
2014/02/19 19:42
.
2014/02/19 19:42
..
2014/02/19 15:35 1,656 AndroidManifest.xml
2014/02/19 15:35 687,024 classes.dex
2014/02/19 15:49
META-INF
2014/02/19 15:49
res
2014/02/19 15:35 2,200 resources.arsc
2)进入到dex2jar目录中,运行情况如下:
D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
ex"
this cmd is deprecated, use the d2j-dex2jar if possible
dex2jar version: translator-0.0.9.15
dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
Done.
在apk所在的目录会出现 classes_dex2jar.jar 文件。
3) 用JD-GUI对jar包进行查看,可以查看源文件

二.反编译apk

1.在下载APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.
2012/12/06 11:44 854,016 aapt.exe
2014/02/19 17:15 277,372 Apkd.apk//示例用apk文件
2012/12/23 23:39 92 apktool.bat
2013/02/03 02:37 2,655,843 apktool.jar
2.进入到apktool.bat所在的目录,运行:
apktool d Apkd.apk decode_dir
反编译后,decode_dir目录下的内容如下:
2014/02/19 17:16 716 AndroidManifest.xml
2014/02/19 17:16 237 apktool.yml
2014/02/19 17:18
build
2014/02/19 17:16
res
2014/02/19 17:16
smali
此时我可以查看原文件AndroidManifest.xml了,也是查看smali源文件(是用smali语言写的,可以对照java看)。

三.APKTOOL的使用

1).decode
该命令用于进行反编译apk文件,一般用法为
apktool d

代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
代表了反编译后的文件的存储位置,比如C:\MusicPlayer
如果你给定的已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f

这样就会强行覆盖已经存在的文件
2).build
该命令用于编译修改好的文件,一般用法为
apktool b

这里的
就是刚才你反编译时输入的
(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
3).install-framework
该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

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

java源代码:

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.*;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView a = (TextView)this.findViewById(R.id.test) ;
a.setText("raoliang");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

对应的smali源代码:
.class public Lali/text/apkd/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"

# 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_game.apk签名:
jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
最后,在安装到手机前,需要把手机中的已有版本先卸载,因为如果签名不同,是不能覆盖安装的,会提示“应用程序未安装”错误。
完整的运行情况如下:

D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
输入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 demo.keystore Apkd.apk demo.keystore
输入密钥库的口令短语:
正在添加: META-INF/MANIFEST.MF
正在添加: META-INF/DEMO_KEY.SF
正在添加: META-INF/DEMO_KEY.RSA
正在签名: res/drawable-hdpi/ic_launcher.png
正在签名: res/drawable-mdpi/ic_launcher.png
正在签名: res/drawable-xhdpi/ic_launcher.png
正在签名: res/drawable-xxhdpi/ic_launcher.png
正在签名: res/layout/activity_main.xml
正在签名: res/menu/main.xml
正在签名: AndroidManifest.xml
正在签名: classes.dex
正在签名: resources.arsc

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

安卓手机上安装好的软件怎么用手机打包成apk文件

安卓手机软件程序均为APK格式文件,很多小白朋友对于安卓手机如何安装apk文件不是很了解,下面本文于大家简单介绍下。由于很多朋友使用一些手机应用软件里面下载安装程序,但那仅仅是针对Wifi用户很方便,而没有Wifi用户因流量过高,一般都伤不起。对于多数没有Wifi的手机用户多数则电脑上下载安卓软件,然后复制到手机中再安装,这里就会涉及到如何安装apk文件的问题,下面一起来看看。
APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
apk文件安装方法大致有两种:
⒈)在电脑中下载好APK软件文件,然后使用数据线将手机与电脑连接,然后将APK文件拷贝到手机SD卡中,然后再进入手机文件管理器,找到APK文件,然后打开运行安装即可。
⒉)另外一种更方便的方法是,在电脑中安装豌豆荚或者91助手,然后下载的APK文件即可被豌豆荚或者81手机助手识别,然后我们只需要将手机连接电脑,打开手机USB调试模式,让豌豆荚或者91助手连接上手机即可,之后我们直接在电脑中打开下载好的APK文件,即可打开豌豆荚或者91助手,之后即可安装到手机.

Ⅲ 怎么把Android工程打包成apk

你好
第一步,把普通的android project设置成库项目
库项目也是一个标准的android项目,因此你先创建一个普通的android项目。 这个项目可以起任何的名称,任何的报名,设置其他需要设置的字段等,如图1所示。
接着把项目设置成库项目,步骤如下
在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
在Properties 窗口, 选择"Android" ,Library 属性显示在右下边.
把"is Library" 单选框选择上,再点击 Apply.
点击 OK 关闭Properties 窗口.
这时,这个项目就变成库项目了。
当然,java项目也可以让其变成一个库项目,非常简单,执行上面的四步。其他程序项目就可以引用库项目了。
图 1.使一个项目为库项目
创建manifest文件
一个库项目的manifest文件也和标准的android应用程序一样,声明所有共享的组件。
比如APIDemo中的TicTacToeLib 这个例子,库项目声明了Activity GameActivity:
<manifest>
...
<application>
...
<activity android:name="GameActivity" />
...
</application>
</manifest>

第二步 引用库项目
如果你开发的应用程序想要包括库项目中的代码和资源,非常简单,引用步骤如下

在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
在Properties 窗口, 选择"Android" ,Library 属性显示在右下边.
点击Add ,打开了Project Selection 对话框.
从可用库项目列表选择一个项目,然后点击 OK.
对话框关闭之后点击 Apply (在Properties 窗口).
点击 OK 关闭Properties 窗口.

完成以上六步,Eclipse 会重建项目,把库项目中的内容包含进去。 如图2所示
图 2. 让项目引用一个库项目
如果你想增加多个库项目的引用,使用up和down可以设置他们的相对的优先级和合并顺序。工具在合并引用的库的时候顺序是从低优先级(列表的下面)到高优先级(列表的上面)。 如果不只一个库定义了相同的资源ID,这个工具选择资源时会选择高优先级的资源。应用程序自身拥有最高的优先级,自身的资源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.

在menifest文件中声明库中的组件
在manifest 文件中必须增加对在当前程序中用到的库项目中的所有的组件 。比如,你必须声明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>, 和其他类似的元素。
声明库项目中的组件时,必须使用包含包名的类全名。
在TicTacToeMain 例子中,声明库Activity GameActivity :

<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>

For more information about the manifest file, see the documentation for AndroidManifest.xml.
望采纳祝你好运

Ⅳ 如何将一个完整的Android工程打包成jar包

方法/步骤
1
将一个Android的工程打成Jar包。右键工程--->Export

2
点击Java--->JAR file---->Next
步骤阅读
3
勾选src包即可,其他项不选

4
点击finishi即可,在D盘就可以看到library的jar包

5
其他应用程序引用就可以
END
注意事项
这个只是代码类的达成jar包,不包含res资源

Ⅳ 怎么把android的apk 应用程序打包到userdata.img镜像当中去

主要分以下几步1、生成ant打包所需的配置文件2、生成应用签名的keystore,对apk签名3、编写混淆文件,混淆代码,防止反编译第一步,生成ant打包的配置文件在项目根目录下执行指令:androipdateproject—path.

Ⅵ android应用程序需要打包成什么文件格式

打包成.apk格式,手机才能安装

Ⅶ 如何将多个android应用程序打包到一个apk中

第一步,把普通的android project设置成库项目
库项目也是一个标准的android项目,因此你先创建一个普通的android项目。 这个项目可以起任何的名称,任何的报名,设置其他需要设置的字段等,如图1所示。
接着把项目设置成库项目,步骤如下
在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
在Properties 窗口, 选择"Android" ,Library 属性显示在右下边.
把"is Library" 单选框选择上,再点击 Apply.
点击 OK 关闭Properties 窗口.
这时,这个项目就变成库项目了。
当然,java项目也可以让其变成一个库项目,非常简单,执行上面的四步。其他程序项目就可以引用库项目了。
图 1.使一个项目为库项目
创建manifest文件
一个库项目的manifest文件也和标准的android应用程序一样,声明所有共享的组件。
比如APIDemo中的TicTacToeLib 这个例子,库项目声明了Activity GameActivity:
<manifest>
...
<application>
...
<activity android:name="GameActivity" />
...
</application>
</manifest>

第二步 引用库项目
如果你开发的应用程序想要包括库项目中的代码和资源,非常简单,引用步骤如下

在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
在Properties 窗口, 选择"Android" ,Library 属性显示在右下边.
点击Add ,打开了Project Selection 对话框.
从可用库项目列表选择一个项目,然后点击 OK.
对话框关闭之后点击 Apply (在Properties 窗口).
点击 OK 关闭Properties 窗口.

完成以上六步,Eclipse 会重建项目,把库项目中的内容包含进去。 如图2所示
图 2. 让项目引用一个库项目
如果你想增加多个库项目的引用,使用up和down可以设置他们的相对的优先级和合并顺序。工具在合并引用的库的时候顺序是从低优先级(列表的下面)到高优先级(列表的上面)。 如果不只一个库定义了相同的资源ID,这个工具选择资源时会选择高优先级的资源。应用程序自身拥有最高的优先级,自身的资源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.

在menifest文件中声明库中的组件
在manifest 文件中必须增加对在当前程序中用到的库项目中的所有的组件 。比如,你必须声明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>, 和其他类似的元素。
声明库项目中的组件时,必须使用包含包名的类全名。
在TicTacToeMain 例子中,声明库Activity GameActivity :

<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>

For more information about the manifest file, see the documentation for AndroidManifest.xml.

Ⅷ 如何应用安卓APK文件进行解包打包和修改

不需要解包跟打包,直接修改就可以,修改的的方法。

如下参考:

1.将需要修改的apk包复制到100apktool的路径中。注意:您需要将文件名更改为123apk,如下图。

Ⅸ 安卓手机里的软件怎么打包成安装包

root后system/app下提取 没超级权限的话好像不行吧

Ⅹ 安卓应用程序+应用数据如何打包成APK

我以前公司开发是用的这个cocos creator,很方便。下载几个apk的包。编译没错误就可以打包。

热点内容
新年解压糖 发布:2024-05-20 09:50:55 浏览:54
以太坊价值在哪里存储 发布:2024-05-20 09:46:34 浏览:641
cgipython配置 发布:2024-05-20 09:29:06 浏览:865
在我的世界服务器中隐身 发布:2024-05-20 09:07:46 浏览:972
加西贝拉压缩机好吗 发布:2024-05-20 08:58:56 浏览:757
eve脚本航 发布:2024-05-20 08:56:59 浏览:591
取票人的密码是什么 发布:2024-05-20 08:21:43 浏览:963
天猫帐号密码应输入什么 发布:2024-05-20 08:16:26 浏览:272
plsql异常处理 发布:2024-05-20 07:54:47 浏览:542
dreamweaver上传网页 发布:2024-05-20 07:51:24 浏览:462