A. 如何获取apk包的包名和activity
方法一 用重签名工具,这个在Robotium 中用得比较多
另外一种方式用命令方获取
Aapt mpbadging xxxx.apk
第一个框为包名
第二个框为主Activity名
如果取包名与Activity在命令行中不方例还可以用以下方式获取
Aapt mpbadging xxxx.apk >c:\apk.txt
之后打开c:\apk.txt
第三种方式,如果你装了Appium 可以这么操作下
进入设置页,选择APK 路径,下面就会显示包名和Activity名称
第四种用hierarchyviewer 查看
Aapt 命令
AAPT mp xmltree XXX.APK androidManifest.xm. >c.txt
之后去C.TXT 查看
第6种
Adbshell mpsys activity activities >d:\log.txt
之后去log.txt 搜package 和Activity
第七种
Adb logcag >d:\3.txt
之后打开手机上的应用
打开之后立即在电脑上按ctrl+c
之后去3.txt 找PACKAGE和Activity
B. 请教如何使用android studio同时打包多个apk
问题:项目中不同的分发渠道可能需要打包多种APK(同样的代码),包名可能是不一样的,如果一个一个修改包名重新编apk是很麻烦,可以参考下列步骤在Android Studio上操纵Gradle来打包不同包名的apk。
这里例子的目标是,同样的代码,打包成com.example.android.newsreader和com.example.android.newsreaderdev两个不同包名的apk
1. 首先在build.gradle的android节点中加入下列代码
proctFlavors{
flavors_release{
manifestPlaceholders = [str:"releaseStr",package_name:"com.example.android.newsreader"]
applicationId "com.example.android.newsreader"
}
flavors_dev{
manifestPlaceholders = [str:"devStr",package_name:"com.example.android.newsreaderdev"]
applicationId "com.example.android.newsreaderdev"
}
}
这个proctFlavors的功能即为打包的参数化而提供的,flavors_release和flavors_dev可以被视作自己定义的两套变量集,实际操作中可以自定义
注意到这里有一个manifestPlaceholders的参数,里面提供的实际上是几个参数变量和值,这里的参数都可以通过${name}的方式在AndroidManifest.xml中使用。原来是想在AndroidManifest中的manifest的节点将package给参数化来达到打不同包名的apk的目的,即:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="${package_name}"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14" />
...
结果Android Studio的Lint自动给了我一个提示:
说明Android Studio推荐我采用设置applicationId的方式来将包名参数化
于是乎,我在flavors_release和flavors_dev中又加入了applicationId的设置,即:
和
下面看看是否有作用
2.这一步需要操纵Gradle面板
此时我们在Android Studio的右侧的gradle面板中点击按钮刷新下,于是在build子栏目中出现下列东西:
其中以assemble*打头的都是生成apk的选项,生成的apk在build/outputs/apk中,这里我们对任一项双击即可生成对应的apk
对应flavors_release和flavors_dev的apk应该就是和这两个,于是分别双击他们等待各自生成apk的过程
3. 下面查看Project面板中的内容
打开project面板,我们发现真的出现了几个apk:
可以看出来每次双击gradle中的一条会生成三个apk,我们把newsreader-flavors_dev-debug.apk和newsreader-flavors_release-debug.apk拿出来,用aapt命令查看下他们的包名(命令为aapt mp badging {filename.apk})
果然,包名是不一样的。
那么是否可以同时安装呢,这里把两个apk都安装到模拟器中,果然是可以的:
可以看到出现了两个NewsReader,其实都是一模一样的,只是包名不同
4. 如何在打包的时候指定签名
在Android Studio菜单栏进入Build->Generate Signed Apk:
指定你的keystore后点击next:
这里会发现在Flavors里面有两个项目,即我们在gradle里面配置上的两个flavors参数集,各自选上,点击finish即可生成所需要的apk
5. 有个疑问,为什么修改applicationId即可修改包名呢?applicationID和packagename到底是什么关系
实际上, package 代表了 java 代码中的包名。 applicationId 代表了应用中的唯一标识。和应用签名一起用来区别和其他应用不同。我想这也就是为什么 Google 市场能够允许相同应用不同 applicationId 的原因。
最后一个提示: 打包出来后,发布前最好要全面测试下,以免出现问题
C. 怎样获取应用的包名和类名及解析aapt
原理:
通过查看AndroidManifest.xml
方法:
可以通过如下方法获得:
1.aapt
aapt mp xmltree apk路径 AndroidManifest.xml > 输入的路径
2.apktool 反编译
apktool d -f apk路径 输出的路径
3.monkey---Android自带的工具
adb shell monkey --port 1080 -v -v
aapt即 Android Asset Packaging Tool
该工具在SDK/tools目录下,如果你没有设置环境变量,那需要进入该目录下才能运行aapt命令,如果设置了环境变量则可以在任何目录下运行aapt命令了。
1、列出压缩文件目录
aapt l[ist] [-v] [-a] file.{zip,jar,apk}
参数:
-v:会以table的形式输出目录,table的表目有:Length、Method、Size、Ratio、Date、Time、CRC-32、Name。其中Method表示压缩形式,有Deflate和Stored两种,即该Zip目录采用的算法是压缩模式还是存储模式;Ratio表示压缩率。
-a:会详细输出所有目录的内容。
2、查看APK的相关信息
aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
badging Print the label and icon for the app declared in APK.
permissions Print the permissions from the APK.
resources Print the resource table from the APK.
configurations Print the configurations in the APK.
xmltree Print the compiled xmls in the given assets.
xmlstrings Print the strings of the given compiled xml assets.
1)、查看APK包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息
aapt mp badging < file.apk>
2)、查看权限
aapt mp permissions <file.apk>
3)、查看资源列表
aapt mp resources <file.apk>
把查看信息保存到文件中去可以使用:
aapt mp resources <file_path.apk> > sodino.txt
4)、查看APK配置信息
aapt mp configurations <file_path.apk>
5)、查看指定APK的指定XML文件
aapt mp xmltree <file_path.apk> res/***.xml
以树形结构输出的xml信息。
aapt mp xmlstrings <file_path.apk> res/***.xml
输出xml文件中所有的字符串信息。
3、编译android资源
aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
[-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
[--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
[--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
[--rename-manifest-package PACKAGE] \
[--rename-instrumentation-target-package PACKAGE] \
[--utf16] [--auto-add-overlay] \
[--max-res-version VAL] \
[-I base-package [-I base-package ...]] \
[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file
\
[-S resource-sources [-S resource-sources ...]] \
[-F apk-file] [-J R-file-dir] \
[--proct proct1,proct2,...] \
[-c CONFIGS] [--preferred-configurations CONFIGS] \
[-o] \
[raw-files-dir [raw-files-dir] ...]
Package the android resources. It will read assets and resources that are
supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R
options control which files are output.
部分参数解释:
-f:如果编译出来的文件已经存在,强制覆盖;
-m:使生成的包的目录放在-J参数指定的目录;
-J:指定生成的R.Java的输出目录;
-S:res文件夹路径;
-A:assert文件夹的路径;
-M:AndroidManifest.xml的路径;
-l:某个版本平台的android.jar的路径;
-F:具体指定APK文件的输出
1)、将工程的资源编译出R.java文件
aapt package –m –J <R.java目录> -S <res目录> -l <android.jar目录> -M
<AndroidManifest.xml目录>
2)、将工程的资源编译到一个包里
aapt package –f –S <res目录> -l <android.jar目录> -A <assert目录> -M
<AndroidManifest.xml目录> -F <输出的包目录>
4、打包好的APK中移除文件
aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
5、添加文件到打包好的APK中
aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
6、显示aapt的版本
aapt v[ersion]
D. apktool文件夹中怎么没有aapt文件
RT,我去安卓网上下了几个游戏,可是下来以后发现时没有apk的,而是有三个分别名为com,META-INF,res的文件夹,还有个AndroidManifest的xml文件,还有个classes.dex的文件,还有resource.arsc文件,怎么安装呢?另外一个软件没有com文件夹,剩下的都一样。我对android不是很了解,求高手赐教。
找错位置了,比如说你的SDK存放路径在 E:\eclipse下
文件夹名叫 android-sdk-windows
则你要找的相关的ADB命令应该是在 E:\eclipse\android-sdk-windows\tools下面
而不是 例如 E:\eclipse\android-sdk-windows\platforms\android-7\tools 这样的文件夹下面。。
E. linux怎么用命令看android手机上已安装应用的名字,包名,版本,图标。比如adb什么的。
有一个相关adb 命令可以查看已安装应用的包名:
adb shell
su (需要获取系统管理员权限,也就是说手机必须root过才能执行下一步的命令)
ls -l /data/app
如图。至于版本号,图标这些东西在命令行是看不到的,都在应用内部打包了。
F. 如何用AndroidStudio打多包名APK
1. 首先在build.gradle的android节点中加入下列代码
view sourceprint?
01.proctFlavors{
02.flavors_release{
03.manifestPlaceholders = [str:"releaseStr",package_name:"com.example.android.newsreader"]
04.applicationId "com.example.android.newsreader"
05.}
06.
07.flavors_dev{
08.manifestPlaceholders = [str:"devStr",package_name:"com.example.android.newsreaderdev"]
09.applicationId "com.example.android.newsreaderdev"
10.}
11.}
这个proctFlavors的功能即为打包的参数化而提供的,flavors_release和flavors_dev可以被视作自己定义的两套变
量集,实际操作中可以自定义
注意到这里有一个manifestPlaceholders的参数,里面提供的实际上是几个参数变量和值,这里的参数都可以通过${name}的方式在AndroidManifest.xml中使用。原来是想在AndroidManifest中的manifest的节点将package给参数化来达到打不同包名的apk的目的,即:
view sourceprint?
1.<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2.package="${package_name}"
3.android:versionCode="1"
4.android:versionName="1.0">
5.<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14" />
6....
结果Android Studio的Lint自动给了我一个提示:
说明Android Studio推荐我采用设置applicationId的方式来将包名参数化 于是乎,我在flavors_release和flavors_dev中又加入了applicationId的设置,即: 和
下面看看是否有作用
2.这一步需要操纵Gradle面板
此时我们在Android Studio的右侧的gradle面板中点击 按钮刷新下,于是在build子栏目中出现下列东西:
其中以assemble*打头的都是生成apk的选项,生成的apk在build/outputs/apk中,这里我们对任一项双击即可生成对应的apk
对应flavors_release和flavors_dev的apk应该就是和这两个,于是分别双击他们等待各自生成apk的过程
3. 下面查看Project面板中的内容
打开project面板,我们发现真的出现了几个apk:
可以看出来每次双击gradle中的一条会生成三个apk,我们把newsreader-flavors_dev-debug.apk和
newsreader-flavors_release-debug.apk拿出来,用aapt命令查看下他们的包名(命令为aapt mp
badging {filename.apk})
果然,包名是不一样的。 那么是否可以同时安装呢,这里把两个apk都安装到模拟器中,果然是可以的:
可以看到出现了两个NewsReader,其实都是一模一样的,只是包名不同
4. 如何在打包的时候指定签名
在Android Studio菜单栏进入Build->Generate Signed Apk:
指定你的keystore后点击next:
这里会发现在Flavors里面有两个项目,即我们在gradle里面配置上的两个flavors参数集,各自选上,点击finish即可生成所需要的apk
5. 有个疑问,为什么修改applicationId即可修改包名呢?applicationID和packagename到底是什么关系
实际上, package 代表了 java 代码中的包名。 applicationId
代表了应用中的唯一标识。和应用签名一起用来区别和其他应用不同。我想这也就是为什么 Google 市场能够允许相同应用不同
applicationId 的原因。 最后一个提示: 打包出来后,发布前最好要全面测试下,以免出现问题
G. 如何使用aapt替换apk里面的asset文件夹
实际开发中经常遇到这样的需求:一个应用打不同的包时,不同的包 的logo、 应用名,或者应用中的某些标志性的图片、显示的文字内容、欢迎语什么的都要做出相应的改变。 对此,我们不可能将原工程复制出来再重新建立一个工程
实际开发中经常遇到这样的需求:一个应用打不同的包时,不同的包 的logo、 应用名,或者应用中的某些标志性的图片、显示的文字内容、欢迎语什么的都要做出相应的改变。 对此,我们不可能将原工程复制出来再重新建立一个工程,然后替换成不同的资源再打包。 那么本文为读者提供一种相对简便的方法,有这种需求的友友就可以接着看下去了...
编译时合并与替换资源,主要用到aapt命令工具:
先看一下aapt命令 跟不同参数时的作用:
命令行界面切换到 aapt 命令所在目录,输入aapt 如下:
\
\
可以看出, -s 可以指定寻找资源的目录,而 overlay 可以合并资源:
比如 ,工程中原有的res 里面有个字符串 :app_name(Menifest.xml中配置的应用名)
九秀美女直播string>,
在工程中新建两个资源文件夹res2和res3,里面分别有两个字符串: app_name,more
//res2
9秀直播string>
更多2string>,
//res3
MM直播string>
更多3string>,
并在build.grandle里配置如下
aaptOptions { additionalParameters '-S', 'G:/wkplace/AS/NineShow3.0/res2', '-S', 'G:/wkplace/AS/NineShow3.0/res3', '--auto-add-overlay' noCompress 'foo', 'bar' ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:
_*:!CVS:!thumbs.db:!picasa.ini:!*~' }
运行后,应用名会显示res里的app_name:“九秀美女直播”。这是因为: -s 可以指定多个资源目录,我们通
H. 如何在Linux下用命令行运行aapt工具
如果你用的是 Ubuntu 或其他 Debian 衍生的发行版,可以使用 apt-get命令。比如:$ sudo apt-get install 软件包名称
然后输入密码,如果软件包的名称正确,软件安装进程就会被启动。
apt-get 还可以删除软件,只要把上面的 install 换成 remove 就行了。
I. android中的aapt命令,aapt add xxx.apk xxx.dex ,如果apk和dex 不同一个目录,该怎么写呢
绝对路径
J. aapt不是内部或者外部命令,也不是可运行的程序或批处理文件
你在sdk
\build-tools下的某个android版本中可以找到aapt.exe
文件,如:
D:\software\test_tools\adt-bundle-windows-x86-20131030\sdk\build-tools\android-4.4
然后把该路径添加到你的path
变量中,确定后重启cmd,
输入aapt就可以正常使用了。