① 想問一下怎 么 檢 測 APK 文 件
把ppt的內容總結一下,並把問題說明一下:
把基本步驟搞出來,用notepad的程序吧,直接安裝apk,就當做是不知道源碼就好啦!
直接用自己的手機上就行啦!!
一、重簽名:
步驟:
1、直接運行re-sign.jar進行簽名
注意事項:
(1)官網直接搜就行:
(2)對android 4.4.2(API19)的好像簽名有問題,從表象看能夠簽名成功,去程序里run as android junit test的時候就會提示類似這樣的Error:
Test run failed: Permission Denial: starting instrumentation ComponentInfo{com.filemanager.test/com.zutubi.android.junitreport.JUnitReportTestRunner} from pid=6072, uid=6072 not allowed because package com.filemanager.test does not have a signature matching the target com.estrongs.android.pop ——針對這個問題,就只能通過命令行來簽名了,下面的2中會講到
對Anroid 4.2(API17)和Android 4.3(API18)可以成功簽名,以官方提供的例子(notepad.apk)為例,知鍵盯它本身的例子是有源碼的,我們重簽名apk,按照沒有源碼的例子來講解。
好,接下來直接雙擊運行re-sign.jar,出現了以下提示:(第一種可能出現的問題)
原因是:運行re-sign.jar需要配置ANDROID_HOME的環境變數,應該是程序寫死的需要從這個環境變數找到文件目錄,然後調用其下面的zipalign.exe程序
解決方案:
配置環境即可:直接我的電腦右鍵-系統屬性-高級屬性設置-環境變數-新建環境變數名稱:ANDROID_HOME,value是:「D:\搭和Program Files\adt-bundle-windows-x86-20130717\sdk」(這是我的sdk路徑,個人安裝路徑不同,需要請自尋)
之後重新雙擊re-sign.jar,就不會再出現上面的提示,然後將apk直接拖放到re-sign.jar的運行界面上,會出現一個提示,提示保存生成的重簽名後的文件
直接點擊保存即可。。。
這里的重簽名用的其實也是debug_keystore的這個簽名,所以簽名帶了一個debug,這是猜的哈。。。。
然後re-sign.jar會彈窗提示重簽名後的apk文件的包名和MainActivity:
2、命令行簽名
用aapt badging 命令查看重簽名後的PackageName和MainActivity
原理:robotium為什麼需要對程序重簽名?
(1)什麼是簽名?安卓程序為什麼要簽名
簽名就是為了標志自己,為自己的程序打上標記,讓別人看到簽名的時候知道這個是跟你有關的(不管是程序,還是其他的簽名都是如此的作用)
安卓程序簽名是Android系統要求,Android系統要求每一個應用程序必須要經過數字簽名才能安裝到應用系統中,如果不進行數字簽名,是沒有辦法安裝到應用系統中的!Android通過數字簽名來標識應用程序的作者和在應用程序之間建立信任關系,亮飢Android由應用程序的作者完成,並不需要權威認證,只是用來讓應用程序包自我認證的。
(2)如何進行簽名?(debug模式和release模式)
debug模式:調試模式下,程序不用專門簽名,就能夠在手機和模擬器上運行,ADT會自動的使用debug密鑰為應用程序簽名(debug密鑰全稱:deg.keystore,具體位置:C:\Documents and Settings\xxx\.android\debug.keystore)
自己使用不同的PC機生成的debug.keystore,發現根本不同,所以如果更換了機器,就會導致簽名不同,因此下面會說到,robotium的這個程序,如果testapk是在其他機子上做了修改的,必須重新對原來的待測程序進行重簽名,否則就會出現簽名不匹配的問題
(具體例見:在A機器上對notepad進行簽名作為待測程序,在B機器上編寫testcase,直接在eclipse中Run as Android Junit Test,就會出現crash的問題,還是提示簽名不匹配?,但還是需要驗證一下!!!)
release模式的簽名包含兩種方式:
1)Eclipse+ADT方式
這個是最簡單且常用的方式,步驟如下:
A: Project -> 取消Build Automatically
B: Project -> Clean
C: Project -> Build
D: 右擊項目->android tools->Export signed Application package
第一次運行可以使用 Create new keystore,以後簽名就可以使用 User existing keystore。按照說明一步步操作即可,很容易就能打包簽名成功。
注意:請妥善保管生成的簽名文件,不要丟失,以保證應用發布可重復使用,以免不能進行應用的無縫持續升級。
2)命令行方式:詳見(轉載文章:【轉載】關於簽名——Android應用程序簽名詳解【轉載】關於簽名——Android應用程序簽名詳解)
(3)被測程序為什麼要進行重簽名?
簽名的好處:
(1)有利於程序升級。
當新版程序和舊版程序的數字證書相同時,Android系統才會認為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數字證書不相同,則Android系統認為他們是不同的程序,並產生沖突,會要求新程序更改包名。
(2)有利於程序的模塊化設計和開發。
Android系統允許擁有同一個數字簽名的程序運行在一個進程中,Android程序會將他們視為同一個程序。所以開發者可以將自己的程序分模塊開發,而用戶只需要在需要的時候下載適當的模塊。
(3)可以通過許可權(permission)的方式在多個程序間共享數據和代碼。
Android提供了基於數字證書的許可權賦予機制,應用程序可以和其他的程序共享該功能或者數據給那那些與自己擁有相同數字證書的程序。如果某個許可權(permission)的protectionLevel是signature,則這個許可權就只能授予那些跟該許可權所在的包擁有同一個數字證書的程序。
robotium為什麼需要對被測程序進行重簽名?
根據上面簽名的好處,知道了重簽名後能夠共享數據和代碼,也能夠將被測程序與testapk跑在同一個進程中,這樣testapk就能夠對被測程序進行直接交互。
具體原因見下方描述:
robotium是對Instrumentation做的二次封裝,Instrumentation要求待測程序與testapk跑在同一個進程中,而且需要對其進行數據和資源的操作,那麼就必須要保證簽名一致,就根據上面所說的簽名的好處就可以知道,簽名是前提和必要條件,否則將無法用testapk對待測程序進行操作和UI上的測試。
Android提供了自定義的運行測試用例的類,叫做InstrumentationTestRunner。這個類控制應用程序處於測試環境中,在同一個進程中運行測試程序和主程序,並且將測試結果輸出到合適的地方。IntrumentationTestRunner在運行時對整個測試環境的控制能力的關鍵是使用Instrumentation。注意,如果你的測試類不使用Instrumentation的話,你也可以使用這個TestRunner。
當你運行一個測試程序時,首先會運行一個系統工具叫做Activity Manager。Activity Manager使用Instrumentation框架來啟動和控制TestRunner,這個TestRunner反過來又使用Intrumentation來關閉任何主程序的實例,然後啟動測試程序及主程序(同一個進程中)。這就能確保測試程序與主程序間的直接交互。用eclipse編寫testcase,編譯完測試工程後,你就可以使用系統工具Activity Manager來運行測試程序。你給Activity Manager提供了TestRunner的名(一般是InstrumentationTestRunner,在程序中指定);名包括被測試程序的包名和TestRunner的名(這一點在robotium中也一樣,也需要提供,才能夠找到你需要測試的程序)。Activity Manager載入並啟動你的測試程序,殺死主程序的任何實例,然後在測試程序的同一個進程里載入主程序,然後傳遞測試程序的第一個測試用例。這個時候,TestRunner會接管這些測試用例,運行裡面的每個測試方法,直到所有的方法運行結束。如果你使用Eclipse,結果會在JUnit的面板中顯示。如果你使用命令行,將輸出到STDOUT上。
如果不重簽名的話,我們用官方提供的原apk包和自己後來生成的testapk包安裝,用testapk包對原apk包進行測試,就會出現以下錯誤提示:
二、安裝已經重簽名的待測試的apk文件到安卓手機
直接用adb install 待測試的apk(拖到cmd裡面即可),之後enter,安裝成功即可
三、Robotium的testcase的編寫配置(在eclipse下進行)
1、創建Android Test Project
(1)File-New-Project-Android-Android Test Project
(2)輸入工程名-next,選擇This project-finish
2、創建Anroid testcase(包括uiatumatorviewer的使用,這個得在17及以上才有吧。。。)
使用uiautomatorviewer獲取待測程序的布局,具體可將該工具的路徑添加到環境變數中,或者進入該目錄,用cmd運行,直接輸入uiautomatorviewer就可以運行起來該工具,這是已經封裝好的工具,可以直接用。。。
創建testcase的具體過程如下:
(1)工程名-src-包名-右擊new-Junit Test Case
(2)在name一欄輸入Test Case的名稱,比如TestNotePad
(3)Superclass一欄,選擇android.test.,之後選擇setup,teardown,constructor方法,點擊finish即可
3、導入Robotium-jar包(需要注意和需要配置的項目)
通過建立lib文件夾,直接文件,需要在Build Path中進行配置。。。。具體步驟與下面添加report-jar包的步驟相同
(1)工程名-new-folder-lib
(2)直接將之前下載的robotium-solo-5.2.1.jar拷貝粘貼到lib目錄下
(3)工程名-右擊-Build Path-Configure Build Path-Libraries-Add External JARs
(4)點擊右邊的Order and Export,選擇Robotium-solo-5.2.1.jar的選項,點擊OK
4、修改AndroidManifest.xml文件
該配置文件的修改主要包含增加<Instrumentation>節點
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="xxx.xxx.xxx" />
targetPackage與re-sign.jar中所獲取到的包名相同,是指被測程序的包名
5、編寫測試代碼
四、跑case:
可以全部跑,也可以單個跑;可以在eclipse中操作,也可以在cmd下直接用命令行方式操作:
(1)可以用adt工具,從eclipse里直接操作:運行所有用例——如果使用了TestSuite對用例進行一定順序的處理,就可以在該類中添加你所需要的所有用例,然後在這個類文件上,右鍵Run as Android Junit Test;運行單個用例——可以直接在某個test的類文件上,右鍵Run as Android Junit Test,就能夠只跑你想要跑的這個類
(2)在cmd下直接用命令行方式操作:
adb shell am instrument -w com.example.test/android.test.InstrumentationTestRunner
參數說明:
-w是必寫的,否則看不到測試結果的。。。
com.example.test——為testapk的包名,android.test.InstrumentationTestRunner是AndroidManifest.xml中所配置的
<instrumentation
android:name="android.test.InstrumentationTestRunner"/>的android:name相同即可,即通過什麼來啟動這個這個測試
如果在程序中導入了report-jar包,那麼修改了AndroidManifest.xml中所配置的內容如下:
<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"/>
就需要修改這個cmd命令為:adb shell am instrument -w com.example.test/com.zutubi.android.junitreport.JUnitReportTestRunner
五、配置report-jar包,直接在手機上生成所需要的xml的測試運行結果
導入這個jar包,就可以不用依賴eclipse了,將程序啟動起來後,就可以關閉eclipse,等待程序跑完,就可以在特定位置獲取程序運行結果,具體導入步驟見下方:
有現成的jar包可以幫忙完成這個操作,名字是android-junit-report-1.5.8.jar
下載官網:jsankey/android-junit-report · GitHubDownloads · jsankey/android-junit-report · GitHub
然後下載完成之後,需要把這個jar添加到我的test工程的lib文件夾下,然後將其添加到build-path中
具體過程如下:
1、建立一個安卓的測試工程,導入Robotium包,建立好測試用例
2、在測試工程的lib目錄下,復制android-junit-report-1.5.8.jar包,可以直接將jar包拖入到工程的lib文件下,松開滑鼠,之後會提示是否要 files,點擊確定即可
3、右鍵該jar包——Build Path——Add to Build Path(注意一定要把Libraries和Order and Export下的該jar都勾選上,點擊OK)
4、在測試工程的AndroidManifest.xml文件中,修改<instrumentation>的欄位的內容,
修改之前的內容是:targetPackage表示待測程序的包名
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="xxx.xxx.xxx"/>
修改之後的內容是:
<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
android:targetPackage="xxx.xxx.xxx"/>
5、右鍵測試工程——Run As——Run Configuration
之後打開Run Configuration的界面,選擇自己的那個工程,右邊的Test下面的Instrumentation runners,選擇為之前AndroidManifest.xml中配置好的,之後apply,並確認即可
6、運行程序Run AS——Android Junit Test,運行case,之後就會在 /data/data/ com.xxx.xxx/ files 目錄下 生成一個文件junit-report.xml:
然後用adb pull可以將手機端的文件拷貝到電腦端:
adb pull /data/data/xxx.xxx.xxx/files/junit-report.xml D:\
參數說明:xxx.xxx.xxx就是targetPackget,即待測程序的包名,這個xml的測試報告生成位置就在這個包的files目錄下,注意:不是在testapk的包名下面
D:\ 的參數不添加的話,文件就被pull到當前目錄下,如果想要定位一個特定的位置,如D:\
7、之後能夠log信息:
這里能夠看到運行的是哪個testsuite裡面的哪個testcase,然後運行失敗的話,就會打出詳細的failure message的信息
如果運行成功的話,就沒有<failure message>的節點
六、在整個過程中可能遇到的問題:
1、classnotfound的問題(jar包的導入問題,libraries中沒有包含進來,MainActivity寫錯了。。。)
2、crash的問題(沒有安裝測試包,找不到這個包名的時候應該也會崩潰)
② 誰能提供Android API 17和API 19的壓縮包,Google上不去下載不了
我有個19的 我也在找17 的 不過你可以去弄個翻 牆軟體,這樣下載就沒問題了
③ 安裝好android studio後就有這個問題,說是gradle project 出問題了,顯示
1、錯誤的原因:游敏
當前Android Studio無法解析當前版本,解神磨物決辦法下載API 17版本,然後重新編譯,問題解決,謝謝采游液納!!
④ android項目更改了api版本(從4.4.2到4.2.2),直接對虛擬機編輯更改target為17版本,項目發布一直失敗
是不是虛擬機沒有對應的sdk,就是缺少了一些必要的運行文件,啟動sdk manager進行更新試試看.不過現在還是推薦使用android studio進行開發.
⑤ Android SDK Manager 在下載文件的時候出現了Done. Nothing was installed. 求解
請用管理員的身份運行"SDK Manager.exe"
⑥ android studio view repuires API level 17 (curren
你用的控制項API最低要求是17 ,你當前使用的是15不符合,升一下版本。
⑦ 「android-17」是什麼手機型號
Android-17不是手機型號,是android的api版本,意思就是當前Android系統的版本是鉛態漏4.2.2
補充:
android系統版本對應的API定義就是閉高andorid-X,其中X是數字。一個API版槐爛本對應一個系統版本。
⑧ 如何查看android api
1、在電腦瀏覽器中網路搜索Android SDK API文檔,找到Android SDK | Android中文API選項並點擊進入。
⑨ Android SDK在線更新"Android 4.2.2(API 17)",因CPU/ABI為空不能創建AVD,下載了鏡像應該放在何處
把上面的armeabi-v7a放在sdk/system-images/android-17文件夾下面吧。
⑩ Android TV(一)(入門准備)
以下內容是對Google Android TV文檔的翻譯,可能存在錯誤,請讀者以官方文檔為准
官方地址
在文檔中Google對Android TV的提出了許多要求,如果你只是使用它的一些UI元素,你可以不用太注意這些要求。
官方地址 鏡像地址
TV應用在手機和平板電腦上使用相同的項目結構。這意味著你可以修改已經存在的應用使其在電視設備上運行或者在你已知的Android知識上創建新的應用。這部分內容主要是准備開發環境和開發TV應用的一些最低要求。(開發TV應用和手機應用本質是一致的,下面的一些要求只是你要使用到一些Google的庫(Leanback support)或者要將應用在GooglePlay上線,否則,要求不必遵守)
Supported Media Formats
DRM
android.drm
ExoPlayer
android.media.MediaPlayer
這一部分主要關於如何修改一個已存在的Android項目或者創建一個新的項目。
下面是讓app在電視設備上運行的主要部分:
1.Activity for TV,在manifest中聲明一個activity。
2.TV Support Libraries
1.SDK tools version 24.0.0 或者更高
2.SDK with android5.0 或者更高
3.創建或更新項目(如果你要修改已存在的Android項目應該是該項目的target為5.0或者更高)
可以兼容到API17
如果一個應用打算運行在電視設備上它必須在manifest文件中聲明一個TV activity。如下:
如果設置required屬性為true,你的APP在設備上將只運行leanback ui。
運行在TV設備上的應用不需要通過觸摸屏幕來輸入。
v17 leanback library 為電視應用程序提供用戶界面部件,特別是用於媒體播放的應用程序。
v7 recyclerview library
v7 cardview library
在完成上述步驟之後,是時候開始為大屏幕構建應用程序了!檢查這些額外的主題,以幫助您建立您的應用程序的電視:
構建電視播放應用
幫助用戶搜索內容
Building TV Games
Building TV Channels