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就可以正常使用了。