2013-04-23 35 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上。