10

更新: これは古い投稿であり、以下の壊れたaaptバージョンへの参照は古くなっています。


以前のフィードバックに基づいて、アプリのアセット ディレクトリにカスタム テキスト フィールドを保存しています。

アセット ファイル内のデフォルトのユーザー詳細を使用してアプリを作成します。クライアントは、アセット ファイル内のユーザーの詳細を含めて、ユーザーごとにアプリを再構築したいと考えています。

(この方法にはいくつかの重大な欠点があることは承知していますが、クライアントはまだこの方法でそれを行うことに熱心です -ユーザーごとに異なるログイン詳細をAPKファイルに埋め込む(または他のオプション?)を参照してください

この質問は、APK ファイルを解凍し、カスタム アセット ファイルを更新した後に、APK ファイルを再構築するときに発生する問題に関連しています。小さな何かが欠けていると確信していますが、これらの方法で見つけたドキュメントと投稿は、初心者にとっては十分に役に立ちません.

  1. aapt - Android sdk ツール: 残念ながら、Android ドキュメント [下のリンク 2] の「aapt の使用」に関する Android ドキュメントは非常に限られています。コンソール コマンド -help は、もう少し詳しい情報を表示します。それを使用してファイルをtest.apkに追加しようとすると、元のファイルが削除され、追加しようとしたファイルのみを含む新しいファイルtest.apk.zipが作成されます。解凍したapkを取得して再パッケージ化するための正しいコマンドラインの組み合わせを見つけることができませんでした-それが私の最初の賞です.

  2. apkbuilder - Android sdk ツール: まず、このツールは非推奨であり、これはマイナス点です。また、解凍したフォルダーにあるもので動作させることもできません。apkbuilder がリソース zip アーカイブを要求し、リソース フォルダーがあるため、apkbuilder の前のステップが欠落していると思います。

  3. ant - ビルド ツール: 他の同様の投稿では、Android ツールを使用するのではなく、ant でビルドするように指示されています。ant を動作させるのに問題があります。Android で Ant を動作させるための特定のリンク [下のリンク 3] は有望に見えますが、別の Android SDK 用のようです (Android によって生成された私の build.xml は彼のものとは異なります)。残念ながら、私は ant についてほとんど知識がなく、現在の問題を解決するのに十分な専門家になるのに苦労しています。
    以下のNickTのソリューションに加えて、antスクリプトを実行すると、エラー
    taskdef class com.android.ant.SetupTask cannot be found using the classloader AntClassLoader[] が表示されます。
    このエラーについてオンラインでいくつかの参照を見つけました。local.properties に、Android SDK インストール フォルダー (sdk.dir=/Applications/android-sdk-mac_86) を指す sdk.dir 設定があることを確認しました。

  4. ???????: 私がリスト/発見していない他のオプションがあるかもしれません。

普段は自分のアイデアで隠れているギアを掘り下げると、困難が生じる可能性があることを認識しています。しかし、多くの SO ユーザーがこれらのことの多くを行うことができることを私は知っています。助けてくれてありがとう。

(Mac Snow Leopard 10.6 64 ビット上の Eclipse 3.6)

PS、まだ複数のハイパーリンクを投稿することはできないため、これらのアドレスを含めて、質問に詳細情報を表示しました.

(1): stackoverflow.com/questions/4783160/embed-login-details-in-apk-file-different-for-each-user-or-other-options

(2): developer.android.com/guide/developing/tools/aapt.html

(3): www.disgruntledrats.com/?p=27

4

4 に答える 4

10

私たちが最終的に選択した方法で私自身の質問に答えるために、「記録のために」:

Ant を正しく動作させることができませんでした (私の理解不足)。

結局、 aapt ツールを使用しました。これは Android SDK のドキュメントに従って動作し、実際に使用するのは非常に簡単です。

aapt add -v Test.apk "assets/readme.txt"

これにより、readme.txt ファイルが追加されます (assets と呼ばれる現在実行中のフォルダーのサブフォルダーに保存していました。新しいファイルを別の場所に保存したい場合、aapt はそれを指定するコマンド ライン スイッチを提供します)。

ただし、いくつかの注意事項があります。

  1. 署名済みの APK ファイルでは動作しませんでした。
  2. 一部のバージョンの aaptは正しく動作しません! 彼らはサブフォルダーを認識しません...

解決するには 1:

  1. APK を署名なしの APK として Eclipse からエクスポートします。
  2. keytool を使用してキーを生成します (Android dev docs を参照)。
  3. apt を使用します。
  4. jarsigner を使用して APK に署名します。

解決するには 2:

私は本当にこれを手伝うことはできません。ダウンロードしようとした SDK (Mac の場合) のすべてのバージョンには、サブフォルダーを認識しない aapt ツールが含まれていました。同僚が動作するバージョンをダウンロードしましたが、彼がダウンロードしたのがどのバージョンであるかをまだ特定できなかったため、この「魔法の」コピーを保持して名前を変更し、動作する新しいバージョンが見つかるまで使用します.

于 2011-02-09T12:16:19.020 に答える
3

最も簡単な解決策は、アプリを最初から再構築するスクリプトを使用して、アプリのテンプレート ソースをクライアントに提供することです。

このようにして、クライアントはフォルダ内のアセットを変更し、バッチ ファイルをダブルクリックして、1 分ほどで apk を取得するだけです。

IDE なしでコンパイルおよびパッケージ化するために ANT について何も知る必要はありません。次の手順に従ってください。

http://developer.android.com/guide/developing/other-ide.html

ANT スクリプトは、「android create」「android update」コマンドによって生成されます。次に、「ant release」を実行するだけで、すぐに使用できます。

于 2011-01-25T12:34:57.277 に答える
2

少し遅いかもしれませんが、この投稿は多くの検索に表示されるので、これは興味深いかもしれないと思いました.

標準の Zip ツールを使用して、META-INF フォルダーを削除して APK の「署名を解除」し、アセット ファイルを更新してから、jarsigner を使用して APK を再署名しました。(jarsigner を使用せずに JAR に署名する方法を見つけることができれば、Java SDK をどこにでもインストールする必要がなくなります。これは非常に便利です。アイデアはありますか?)

于 2011-05-19T03:34:47.290 に答える
1

Yahelの答えを拡張するには、はい、Antが進むべき道だと思います。少し威圧的かもしれませんが、あまりいじることなく「箱から出して」うまく機能するのは驚くべきことです. それをカスタマイズするには少し読む必要がありますが、私はそれを管理できたので、私の経験の利点を提供します.

最初に、提案どおりにサンプル アプリケーションを作成します。c:\junkに作成するとします。 次に、Android SDK\tools ディレクトリのコマンド プロンプトから次のように入力します。

android create project -t 5 -n AndSampleApp -p c:\junk\AndSampleApp -a AndSampleApp -k com.yourpackage.andsample.

( -t 5 は API レベル 7 を提供します。他のオプションを表示するには、「android list targets」と入力します)

Eclipse ワークスペース (私のマシンでは /dev/projects/EclipseHelios/AndroidWorkspace です) でプロジェクトをビルドしていると仮定しましょう。サンプル アプリの build.xml と build.properties を Eclipse のプロジェクト フォルダーにコピーします。

新しく作成されたbuild.xmlを編集して行を削除します

<project name="AndSampleApp" default="help">

それを次のように置き換えます。

<project>

新しく作成された build.properties を編集します。これはコメントを除いて空になり、追加します (必要に応じてカスタマイズします)。

# The password will be asked during the build when you use the 'release' target.
# OH NO IT WON'T! IF YOU PUT THE KEYS & PWDS IN AS BELOW - It'S AUTOMATIC

# Customised (hard coded) section ---------------------

projectname=YourActualProjectName

# Line below is the parent folder of where the sources are
workspace.dir=/dev/projects/EclipseHelios/AndroidWorkspace

# Line below is where you want the binaries to go
outbasebase.dir=/dev/projects/AntBuilds

key.store=c:/users/you/your-release-key.keystore
key.alias=your_release_alias
key.store.password=YourSecretPassword
key.alias.password=YourSecretPassword
#------------------------------------------------------

ant.project.name=${projectname}
base.dir=${workspace.dir}/${projectname}
source.dir=${base.dir}/src
outbase.dir=${outbasebase.dir}/${projectname}
out.dir=${outbase.dir}/bin
layout.dir=${base.dir}/res/layout

その後、/dev/projects/EclipseHelios/AndroidWorkspace/YourActualProjectName でコマンド ライン プロンプトが表示された場合

「ant release」と入力すると、/dev/projects/AntBuilds/YourActualProjectName にビルドおよび署名された apk が作成されます。

build.properties にassets.dirエントリを追加することで、アセットの場所をカスタマイズできるはずです。

于 2011-01-25T14:15:20.673 に答える