2013-04-23 71 views
1

我有一個bash腳本,基本上調用螞蟻編譯Android應用程序源碼樹,然後使用adb在連接的Android設備上安裝和啓動應用程序。建立Android與Mac OS X下的螞蟻和「應用程序未安裝」

bash腳本有很多選項,但它基本上編輯AndroidManifest.xml和strings.xml來更改軟件包和應用程序名稱,然後發出「android更新項目」。最後是「螞蟻釋放」。下面是相關片段:

if [ "$NEWPACKAGENAME" != "" ] ; then 
    echo >> AndroidManifest.xml # the loop below looses the last line, 
           # so we ensure that's a useless line 
    cat AndroidManifest.xml | 
    (while read ROW ; do 
     IS_PACKAGE_ROW=`echo $ROW | grep 'package=' | wc -l` ; 
     if [ $IS_PACKAGE_ROW -gt 0 ] ; then 
      echo " package=\"$NEWPACKAGENAME\"" >> AndroidManifest-np.xml 
     else 
      echo "$ROW" >> AndroidManifest-np.xml 
     fi ; 
     done 
    ) 
    mv AndroidManifest-np.xml AndroidManifest.xml 
fi 

if [ "$APPNAME" != "" ] ; then 
    echo >> res/values/strings.xml # the loop below looses the last line, 
           # so we ensure that's a useless line 
    cat res/values/strings.xml | 
    (while read ROW ; do 
     IS_NAME_ROW=`echo $ROW | grep '<string name="app_name">' | wc -l` ; 
     if [ $IS_NAME_ROW -gt 0 ] ; then 
      echo "<string name=\"app_name\">$APPNAME</string>" >> res/values/strings-nn.xml 
     else 
      echo "$ROW" >> res/values/strings-nn.xml 
     fi ; 
     done 
    ) 
    mv res/values/strings-nn.xml res/values/strings.xml 
fi 

rm -f bin/*.ap_* bin/*.apk* 

$ANDROID update project -p . 

$ANT release 

該腳本在GNU/Linux的偉大,它創建的apk文件,它安裝通過亞行的文件,同樣的apk文件可以通過複製或手動安裝在設備上將其下載到設備(開發人員選項中的未知來源顯然已經激活)。

但是,在MacOS X下它有一個問題:只有通過「adb install」(由腳本本身或手動運行)安裝,才能生成apk文件。如果我嘗試手動將apk文件複製或下載到Android設備,我的意思是在MacOSX下運行時由腳本生成的apk文件,設備會詢問常見的確認信息,但接着顯示「應用程序未安裝」。

我已經閱讀了關於「應用程序未安裝」問題的幾個問題,答覆似乎指向AndroidManifest.xml方向(重複活動等),但我不明白這是怎麼回事在我的情況下,因爲腳本與Linux下一樣,並且在發佈「adb install」命令時也可以在MacOS X下工作(所以apk必須是有效的)。

其他的東西已經嘗試過/驗證:

  • 嘗試安裝新的 版本之前移除從設備上的應用程序
  • 簽名密鑰始終是相同的,而不是調試一個 (但是設備前面的情況下,抱怨我用不同的 簽名)
  • 下載APK從http或作爲電子郵件附件
  • 跳舞片劑周圍有祖傳運動同時試圖安裝...

第四次工作了一次(令我驚訝)。但只有一次,那麼再也不會。我不知道我那時做了什麼不同,祖先跳舞。啊,是的,我已經刪除完全無關的應用程序,然後再安裝它...刪除了一些它們。不用說,刪除不相關的應用程序對其他時間沒有幫助。除此之外,我再也沒有重新安裝過它們......

有什麼建議嗎?

回答

0

我發現了這個問題。我的腳本創建了三個APK文件:myapp.apk,signed-myapp.apk和signed-aligned-myapp.apk,最後一個是正確安裝的文件。

由於多種原因,只有在MacOS X下運行時才使用的文件是myapp.apk(而不是在通過adb複製時)。

這給了我們一個新的理由,爲什麼你可以在沒有進一步的細節的情況下收到「應用程序未安裝」消息:它也會發生在沒有完全簽名的apk上。