問題タブ [dalvik]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5018 参照

java - Dalvik のメモリ モデルは Java と同じですか?

Dalvik のメモリ モデルはJavaのメモリ モデルと同じですか? long参照変数と非プリミティブ変数の読み取りと書き込みがアトミックかどうかに特に関心がありますdoubleが、2 つのプラットフォームのメモリ モデルに違いがあるかどうかも知りたいです。

0 投票する
1 に答える
1467 参照

android - HeapWorkerAndroidのパフォーマンス

この問題を解決するにはどうすればよいですか?

根本的な原因は、多くの一時変数が作成されることです。

0 投票する
4 に答える
4416 参照

java - JVM への Python コードの変換

Python コードを直接 JVM/Dalvik バイトコードに変換する「トランスレータ」(私の頭にこれ以上の言葉がないため) のようなものはありますか?

Android アプリケーションを Python で作成するのに最適です。

: Android プラットフォームのスクリプト機能については知っていますが、「スクリプト」パッケージをインストールせずに「.apk」を生成できるものを探しています... エンドユーザーにとって迷惑です。

0 投票する
1 に答える
161 参照

android - Android向けDXツールのAPIやサンプルの仕様はありますか!

このライブラリを呼び出す dexfile をアドホックに生成するために、DX Tool API を使用したいと思います。このライブラリのサンプルまたは仕様はありますか?

全てに感謝

ご挨拶!

0 投票する
6 に答える
805 参照

java - Dalvik から Java SE への通信

アプリの他のユーザーとデータを同期するためにバックエンド サーバーを必要とする Android 用アプリの開発を計画しています。このサーバーは、UNIX サーバー上で実行される標準の Java で作成する予定です。

私は一度これを 2 つの Android デバイス間で直接行ったことがあります。その場合、両端で送信する必要があるすべてのデータをシリアル化しました。

ただし、Dalvik がシリアライズする形式と Java SE の形式には互換性がないと思われます。これは事実ですか?もしそうなら、私の代替手段は何ですか?私の頭に浮かんだことの 1 つは、ソケットを介して生の xml を送信することでしたが、より良い代替手段があれば喜んで聞いてください。

ありがとう。

0 投票する
3 に答える
141 参照

android - AndroidのJavaで解析を行うためのより簡単な方法はありますか?

簡単な作業を実行するのに苦労しています。次のようなテキストファイルがあるとします。

ユーザーが「a」を入力するたびに、プログラムがこのファイルを読み取り、「b」を出力するようにします。PythonまたはC++では、これを約7行以内で実行できます。

ただし、Androidでこれを行う簡単な方法を見つけるのに苦労しています。たとえば、ここSOで見つけた1つのサンプルには、6つのファイルに900行近く含まれていました。

ファイルを解析して、不足しているAndroidの変数を返す簡単な方法はありますか?

0 投票する
1 に答える
423 参照

windows-ce - Dalvik を WinCE 用にコンパイルできますか? どのように?

以上の簡単な一般的な質問ですが、Dalvik VM を WinCE 用にコンパイルできますか? 特に、WinCE 5.0 でいくつかの Android 互換プロジェクトを実行したいと考えています。明らかに、それは怖いように聞こえますが、私にとっては興味深いです:)

0 投票する
2 に答える
9742 参照

java - Dalvik コードの逆アセンブルを理解していますか?

私が書いた小さな Hello World Android アプリケーションで、smali と baksmali をいじっています。私のソースコードは次のとおりです。

その後、次のように分解されました。

これがある種の中間表現であることは理解していますが、それが何であるかはわかりません。私が理解しているように、この表現を理解する方法について何らかの仕様が必要ですが、それを検索する方法がわかりません。apk ファイルが与えられた場合、Dalvik オペコード仕様を使用してこの表現に到達する方法について、誰かが素人の言葉で説明できますか? 私の現在の理解はこれです:

  • APK を指定すると、バイナリ XML 形式で AndroidManifest.xml を抽出し、 axml2xml.plなどのツールを使用して、完全ではない「テキスト」バージョンのマニフェストを取得するか、 apktoolを使用してより読みやすいものを取得できます。形。しかし、バイナリー XML をテキストに変換するために彼らがどのような仕様を使用しているのかはまだわかりません。
  • 逆アセンブラーは、何らかの形で Dalvil オペコード仕様を利用して、dex ファイルを読み取り、それを上記の表現に変換しています。

上記の 2 つの手順に関する情報 (おそらくいくつかの簡単な例を含む) は、概念を正しく理解するのに大いに役立ちます。

更新 1 (Chris からの返信後に投稿):

基本的に、Dalvik バイトコードにたどり着くには次のようにします。

  • apk を取得して展開し、classes.dex ファイルを取得します。
  • 次に、逆アセンブラーは classes.dex ファイルを読み取り、apk に存在するすべてのクラスを判別します。これがどのように行われるかについての情報を教えてもらえますか? ファイルを 16 進モードで解析し、Dalvik 仕様を検索して、適切に解決しますか? それとも何か他のことが起こっていますか?たとえば、classes.dex で hexdump を使用すると、次のような結果が得られました。

    64 65 78 0a 30 33 ...

これらは現在 Opcode ルックアップに使用されていますか?

  • ツールが着信バイトコードを個別のクラスに分離できたと仮定すると、classes.dex ファイルから 16 進コードをスキャンし続け、Davlik 仕様を使用してテーブルから適切な Opcode 名を出力しますか?

実際、要するに、この「魔法」がどのように行われるかを知りたいのです。たとえば、このツールの作成方法を学ぶ場合、従うべき高レベルのロードマップは何ですか?

0 投票する
3 に答える
2077 参照

android - ビットマップ android の大規模な配列を管理する効率的な方法

大量のビットマップを管理するための推奨/ベスト プラクティスについて質問があります。(これは、ユーザーが移動して新しいページを作成するフリップブック タイプのアプリです...仮想の付箋の山のように k?) 以前は、ビットマップを保持するオブジェクトの配列リストがありましたが (パフォーマンスは良好)、すぐに Out に遭遇しました。 dalvik vm のヒープ制限に関するメモリの問題。

後で、画面に表示されていないビットマップをキャッシュとしてSDカードに保存してから、オンデマンドで取得しようとしましたが、これは以前の方法よりも携帯電話で大幅に遅くなることがわかりました.

この問題に対する最善の攻撃計画は何ですか?

0 投票する
3 に答える
7857 参照

java - DalvikとAndroidツールチェーンからどのような最適化を期待できますか?

私は高性能のAndroidアプリケーション(ゲーム)に取り組んでおり、最初は読みやすさのためにコーディングしようとしていますが、内部で何が起こっているのかを心の奥底に留めておきたいと思っています。C ++を使用して、コンパイラーが私のために何をするか、何をしないかについて、かなり良い直感を身に付けました。私はJava/Androidでも同じことをしようとしています。

したがって、この質問。私はこのトピックについてウェブ上でほとんど見つけることができませんでした。Javaコンパイラ、Dalvikコンバータ(dx)、および/またはJITter(Android 2.2以降)は、次のような最適化を実行しますか?

  • メソッドのインライン化。どのような条件下で?privateメソッドは常に安全にインライン化できます。これは行われますか?public finalメソッドはどうですか?他のクラスのオブジェクトのメソッド?staticメソッド?オブジェクトの実行時タイプがコンパイラーによって簡単に推測できる場合はどうなりますか?final可能な限り、または可能な限りメソッドを宣言する必要がstaticありますか?

  • 一般的な部分式除去。たとえば、someObject.someField2回アクセスした場合、ルックアップは1回だけ実行されますか?ゲッターへの呼び出しの場合はどうなりますか?算術式を2回使用するとどうなりますか。一度だけ評価されますか?for値が変更されないことがわかっている式の結果をループの上限として使用するとどうなりますか?

  • 配列ルックアップの境界チェック。forツールチェーンは、典型的なループなどの特定の条件でこれを排除しますか?

  • 値のインライン化。一部へのアクセスはpublic static final int常にインライン化されますか?彼らが別のクラスにいるとしても?別のパッケージに入っていても?

  • 分岐予測。これもどれほど大きな問題ですか?ブランチングは、一般的なAndroidデバイスで大きなパフォーマンスヒットですか?

  • 単純な算術。someInt * 2に置き換えられsomeInt << 1ますか?

その他..。