1

我有一个 bash 脚本,它基本上调用 ant 来编译 Android 应用程序源代码树,然后使用 adb 在连接的 android 设备上安装和启动应用程序。

bash 脚本有很多选项,但它基本上是编辑 AndroidManifest.xml 和 strings.xml 以更改包和应用程序名称,然后发出“android update project”。最后是“蚂蚁释放”。这是相关的片段:

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 文件,它通过 adb 安装文件,并且可以通过将相同的 apk 文件复制或下载到设备来手动安装相同的 apk 文件(开发人员选项中的未知来源显然已经积极的)。

但是在 MacOS X 下它有一个问题:生成的 apk 文件只有在通过“adb install”(由脚本本身或手动运行)安装时才有效。如果我尝试手动将 apk 文件复制或下载到 Android 设备,我的意思是脚本在 MacOSX 下运行时生成的 apk 文件,设备会要求通常的确认,但随后会显示“未安装应用程序”。

我已经阅读了一些关于“未安装应用程序”问题的问题,回复似乎指向 AndroidManifest.xml 方向(重复活动等),但我不明白这可能是我的问题,因为该脚本与在 Linux 下工作的脚本相同,并且在发出“adb install”命令本身时它也可以在 MacOS X 下工作(因此 apk 必须有效)。

其他已经尝试/验证的事情:

  • 在尝试安装新版本之前从设备中删除应用程序
  • 签名密钥始终相同,而不是调试密钥(但是,如果我使用不同的签名,设备会更早地抱怨)
  • 从 http 或作为邮件附件下载 apk
  • 在尝试安装时,随着祖先的动作在平板电脑周围跳舞……

第四次工作一次(令我惊讶)。但只有一次,以后再也不会了。我不知道那次我做了什么不同,祖先的舞蹈分开了。啊,是的,在安装之前我已经删除了完全不相关的应用程序......删除了其中的一些。不用说,删除不相关的应用程序在其他时候也无济于事。此外,我再也没有重新安装它们......

有什么建议么?

4

1 回答 1

0

我发现了问题。我的脚本正在创建三个 APK 文件:myapp.apk、signed-myapp.apk 和 signed-aligned-myapp.apk,最后一个是要安装的正确文件。

由于多种原因,仅在 MacOS X 下运行时使用的文件是 myapp.apk(但不是通过 adb 复制时)。

这为我们提供了一个新的理由,即您可以在没有更多详细信息的情况下收到“未安装应用程序”消息:当 apk 根本没有签名时也会发生这种情况。

于 2013-05-02T12:29:17.103 回答