2011-01-25 58 views
8

更新:這是一箇舊的帖子,以下參考破碎的aapt版本將過期。重新打包APK文件以包含自定義資產 - 使用什麼構建工具?


根據以前的反饋,我將自定義文本字段存儲在我的應用程序的資產目錄中。

我將使用資產文件中的默認用戶詳細信息編寫應用程序,並且客戶端希望爲每個用戶重建應用程序,包括資產文件中的用戶詳細信息。

(我知道這是方法有一些嚴重的不足之處,但客戶仍然熱衷於做這種方式 - 看Embed login details in APK file, different for each user (or other options?)

這個問題涉及到我與重建的APK文件,在遇到問題時,一旦我解壓縮了它,並更新了自定義資產文件。我確信我錯過了一些小事,但是,我發現這些方法的文檔和帖子對新手來說沒有足夠幫助。

  1. aapt - android sdk工具:不幸的是,關於android docs [下面的鏈接2]上的「使用aapt」的android文檔非常有限。控制檯命令-help顯示更多信息。當試圖用它來添加文件到test.apk時,它最終會刪除原始文件,並創建一個新文件test.apk.zip,其中只包含我嘗試添加的文件。我一直無法找到正確的命令行組合來解壓縮apk並重新打包 - 這將是我的第一獎。

  2. apkbuilder - Android sdk工具:首先這個工具已被棄用,這是一個負面的點。我也無法使它與我在該解壓縮文件夾中的內容一起工作。我想我錯過了一個apkbuilder之前的步驟,因爲apkbuilder需要一個資源zip存檔,並且我有一個資源文件夾。

  3. 螞蟻建立工具:其他類似的帖子說建立與螞蟻,而不是使用Android工具。我很難讓螞蟻工作。獲得Ant與Android [鏈接3下面]的一個特定鏈接看起來很有前途,但看起來像是針對不同的android sdk(由android生成的我的build.xml與他看起來不同)。不幸的是,我對螞蟻​​知之甚少,並且很難成爲足夠專家來解決我目前的問題。
    除了以下NickT的解決方案 - 運行ant腳本給我提供了錯誤
    taskdef類com.android.ant.SetupTask無法使用類加載器AntClassLoader []找到。
    我發現這個錯誤的一些引用在線,已確認local.properties有一個sdk.dir設置,指向我的android sdk安裝文件夾(sdk.dir =/Applications/android-sdk-mac_86)。

  4. ?????:可能還有一些其他的選項,我沒有列出/發現,我會有興趣聽到。

我意識到鑽研通常被我的ide覆蓋的齒輪可能會導致diffuculties。但我知道很多SO用戶可以做很多這些事情,我希望我能夠引起他們中的一些人的興趣。謝謝你的幫助。

(在Mac Snow Leopard 10上的Eclipse 3.6。6 64位)

PS,我無法發佈超過1個超鏈接,所以我已經包含這些地址以顯示我的問題的更多信息。

(1):stackoverflow.com/questions/4783160/embed-login-details-in-apk-file-different-for-each-user-or-other-options

(2):顯影劑.android.com /導向/顯影/工具/ aapt.html

(3):www.disgruntledrats.com/?p=27

+0

**看到這個:** http:// stackoverflow.com/questions/4191762/how-to-view-androidmanifest-xml-from-apk-file/4191807#4191807 – 2011-01-26 08:54:58

回答

9

要回答我自己的,我們最終選擇了方法問題,「備案」:

我無法讓螞蟻爲我工作正常(我缺乏瞭解)。

我最終使用了aapt工具。它的工作原理按了Android SDK文檔,真的是很簡單的使用方法:

aapt add -v Test.apk "assets/readme.txt" 

這將添加一個readme.txt文件(我們當前正在運行的文件夾,稱爲資產的子文件夾中保存它,如果你要存儲新的文件在其他地方,AAPT確實提供了命令行開關指定)

然而,也有一些注意事項:

  1. 我無法得到它的簽署APK工作文件。
  2. 某些版本的aapt 不能正常工作!他們沒有認識到子文件夾...

爲了解決1:

  1. 導出APK從Eclipse作爲一個無符號的APK。
  2. 使用keytool生成密鑰(請參閱Android開發人員文檔)。
  3. 使用aapt。
  4. 使用jarsigner簽名APK。

爲了解決2:

我真的不能在這方面幫助。我嘗試下載的每個SDK版本(在Mac上)都包含一個不識別子文件夾的aapt工具。一位同事下載了一個可以工作的版本,但是我們仍然無法弄清楚他下載的是哪個版本,所以我們保留了這個「神奇」的副本並重新命名,直到找到可用的新版本。

3

的最簡單的解決辦法是給該應用的與模板源您的客戶端可以從頭開始重建應用程序。

這樣你的客戶端只需更改文件夾中的資源,雙擊一個批處理文件並在一分鐘左右即可獲得apk。

你不必瞭解Ant來編譯和打包東西沒有IDE,只需按照下列步驟進行:

http://developer.android.com/guide/developing/other-ide.html

Ant腳本是由「機器人制造」「機器人產生更新「命令。然後你只需要運行「螞蟻釋放」,然後離開你。

+0

謝謝,Yahel,不幸的是我已經閱讀過這個鏈接,但仍然沒有建立。下面更詳細地介紹Nick T的解決方案。 – 2011-01-26 08:36:39

1

爲了擴大Yahel的答案,是的,我認爲Ant是要走的路。它可能有點嚇人,但它很令人驚喜,它能夠在沒有太多混亂的情況下「開箱即用」。自定義它需要一些閱讀,但我管理它,所以我會給你我的經驗的好處。

首先按建議創建示例應用程序。假設您希望在c:\ junk中創建它。 然後從你的Android的SDK \ tools目錄類型命令提示符:

android create project -t 5 -n AndSampleApp -p c:\junk\AndSampleApp -a AndSampleApp -k com.yourpackage.andsample. 

(-t 5爲您提供了API級別7,輸入 '機器人名單的目標,' 看其他的選項)

假設您一直在Eclipse工作區中構建項目(它是我機器上的/ dev/projects/EclipseHelios/AndroidWorkspace)。示例應用程序的build.xml和build.properties複製到項目文件夾在Eclipse

和編輯新創建的build.xml文件,並刪除行

<project name="AndSampleApp" default="help"> 

,並與剛剛取代它:

<project> 

現在編輯新創建的build.properties這將是空的,除了徵求意見,並添加(customisng必要時):

# The password will be asked during the build when you use the 'release' target. 
# OH NO IT WON'T! IF YOU PUT THE KEYS & PWDS IN AS BELOW - It'S AUTOMATIC 

# Customised (hard coded) section --------------------- 

projectname=YourActualProjectName 

# Line below is the parent folder of where the sources are 
workspace.dir=/dev/projects/EclipseHelios/AndroidWorkspace 

# Line below is where you want the binaries to go 
outbasebase.dir=/dev/projects/AntBuilds 

key.store=c:/users/you/your-release-key.keystore 
key.alias=your_release_alias 
key.store.password=YourSecretPassword 
key.alias.password=YourSecretPassword 
#------------------------------------------------------ 

ant.project.name=${projectname} 
base.dir=${workspace.dir}/${projectname} 
source.dir=${base.dir}/src 
outbase.dir=${outbasebase.dir}/${projectname} 
out.dir=${outbase.dir}/bin 
layout.dir=${base.dir}/res/layout 

如果隨後得到的/ dev /項目的命令行提示符/ EclipseHelios/AndroidWorkspace/YourActualProjectName

,並鍵入「螞蟻釋放」,你應該在/ dev目錄下的建成並簽署APK落得/項目/ AntBuilds/YourActualProjectName

您應該可以通過在構建中添加assets.dir條目來自定義資產位置。性能

+0

謝謝,尼克,我仍然收到錯誤:「無法使用類加載器AntClassLoader []找到taskdef類com.android.ant.SetupTask」 - 使用此信息更新了原始帖子。 – 2011-01-26 08:47:15

+0

看看這裏,它似乎屬性不接受非ASCII字符:http://blog.klacansky.com/matter-code/ant-taskdef-class-com-android-ant-setuptask-cannot-be-found – Yahel 2011-01-26 18:42:22

2

可能有點晚了,但這篇文章出現在很多搜索中,所以我認爲這可能是有趣的。

我剛剛使用了標準的Zip工具,通過刪除META-INF文件夾來「卸載」APK,更新了任何資產文件,然後使用jarsigner辭去了APK。 (如果我可以找到一種不使用jarsigner的方式來簽署JAR,那麼我們就不需要在任何地方安裝Java SDK,這真的很有用 - 想出任何人的意見?)

相關問題