1

基本的にantを呼び出してAndroidアプリケーションのソースツリーをコンパイルし、adbを使用して接続されたAndroidデバイスにアプリケーションをインストールして起動するbashスクリプトがあります。

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 ファイルをデバイスにコピーまたはダウンロードすることで、デバイスに手動でインストールできます (開発者オプションの不明なソースは明らかに既に既にアクティブ)。

ただし、MacOS X では問題があります。作成された apk ファイルは、「adb install」(スクリプト自体または手動で実行) でインストールした場合にのみ機能します。apk ファイルを Android デバイスに手動でコピーまたはダウンロードしようとすると、MacOSX で実行したときにスクリプトによって生成された apk ファイルを意味し、デバイスは通常の確認を求めますが、「アプリケーションがインストールされていません」と表示されます。

「アプリケーションがインストールされていません」問題に関するいくつかの質問を既に読みました。返信は AndroidManifest.xml 方向 (アクティビティの重複など) を指しているように見えますが、私の場合、それがどのように問題になるのか理解できません。スクリプトは Linux で動作するものとまったく同じであり、「adb install」コマンド自体を発行するときに MacOS X でも動作するためです (したがって、apk が有効である必要があります)。

すでに試した/検証済みの他のこと:

  • 新しいバージョンをインストールする前にデバイスからアプリを削除する
  • 署名キーは常に同じであり、デバッグ キーではありません (ただし、異なる署名を使用した場合、デバイスは以前に文句を言います)。
  • http から、またはメールの添付ファイルとして apk をダウンロードする
  • インストールしようとしている間、先祖代々の動きでタブレットの周りで踊っています...

4番目は(驚いたことに)一度機能しました。しかし、一度だけ、その後は二度とありません。その時、私が何をしたかはわかりません。祖先のダンスはバラバラです。そうそう、インストールする前にまったく関係のないアプリケーションを削除してしまったのです...それらのいくつかを削除しました。言うまでもなく、関係のないアプリケーションを削除しても、それ以外の場合は役に立ちませんでした。その上、二度とそれらを再インストールしたことはありません...

助言がありますか?

4

1 に答える 1

0

問題が見つかりました。私のスクリプトは、myapp.apk、signed-myapp.apk、signed-aligned-myapp.apk の 3 つの APK ファイルを作成しています。最後の 1 つが正しいインストールです。

多くの理由で、MacOS X で実行されている場合にのみ使用されていたファイルは、代わりに myapp.apk でした (ただし、adb を介してコピーする場合はそうではありません)。

これにより、「アプリケーションがインストールされていません」というメッセージを詳細なしで受け取ることができる新しい理由がわかりました。これは、apk がまったく署名されていない場合にも発生します。

于 2013-05-02T12:29:17.103 に答える