我有一个 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
- 在尝试安装时,随着祖先的动作在平板电脑周围跳舞……
第四次工作一次(令我惊讶)。但只有一次,以后再也不会了。我不知道那次我做了什么不同,祖先的舞蹈分开了。啊,是的,在安装之前我已经删除了完全不相关的应用程序......删除了其中的一些。不用说,删除不相关的应用程序在其他时候也无济于事。此外,我再也没有重新安装它们......
有什么建议么?