問題タブ [dexclassloader]
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.
android - DexClassLoader - 機能の追加
新しい機能でアプリを「更新」できるかどうかを確認するために、DexClassLoader でいくつかのテストを行っています。現在、testClass で動作し、test() メソッドを実行するテスト用のこのメソッドがあります。知りたいのは、既存のクラスを「置換」または「更新」する方法です。アイデアやその他の提案は大歓迎です。
方法:
android - 暗号化された apk を読み込み、オンザフライで復号化する
暗号化された jar ファイルを動的にロードしたい。Dex ファイルを動的にロードしましたが、正常に動作します。エミュレータとAndroidデバイスの両方で試しました。今、暗号化されたファイルをロードしたいと思います。私が理解している限り、クラスローダーをカスタマイズして、ファイルを実行する前にその場で復号化できるようにする必要があります。
誰かがこれを実際に実装する方法を教えてくれたらうれしいです。私にはアイデアがありますが、経験豊富なプログラマーではありません。
前もって感謝します
public class MainActivity extends Activity {
}
android - Android がクラスを決してアンロードしないというのは、まだ事実ですか?
恐ろしいメソッド数の制限に常に達している大規模なアプリがあります。プラグインのサポートを含め、もっと多くのことができるようにする方法を考え出すように依頼されました。コードをアンロードする方法を探していると、JNI のヒントに出くわしました。
クラスは、ClassLoader に関連付けられたすべてのクラスがガベージ コレクションできる場合にのみアンロードされます。これはまれですが、Android では不可能ではありません。
これは、次の場合にプラグインをアンロードできることを意味しているように見えました。
DexClassLoader
.jar ファイルごとに新しいものを使用し、- インターフェイス参照を介してのみプラグインを参照し、
- 完了したら、そのインターフェイス参照のすべてのコピーを null にします。
だから、私はテストケースを作成しました:
- それぞれに固有のローダーを使用して、いくつかの簡単なプラグインを作成しました。
ReferenceQueue<ClassLoader>
そのキューを使用して、2 つのローダーへの弱参照を作成しました。無期限にループするスレッドを作成/開始し、キュー.remove()
とレポートを実行しました。- 同様に、キューを使用し
ReferenceQueue<Class<?>>
て各プラグインへの弱参照を作成しました。getClass()
クラス参照キューを監視する別のスレッドを作成/開始しました。 - 1000x1000xARGB_8888 ビットマップを 1000 個作成して、gc を徹底的に強制します。
私の監視スレッドは機能しているようです -誤って両方のプラグインをロードしてloader2
いたときに gc-ed になっているのを見ましloader1
た ;-) - それ以外の場合、私のスレッドは 4.3 でもサイレントのままです。このテストケースで明らかな何かが欠けている可能性がありますか、それともまだそうですか
Dalvik VM は現在、クラスをアンロードしていません
Google の従業員faddenが Android で言うように: クラスはいつシステムによってアンロードされますか?
android - DexClassLoaderによるjarからのandroid startactivity
jar ファイルを sd カードに入れました。jar ファイルは dx によって処理されています。アクティビティ内のjarで、jarファイルでアクティビティを開始する方法は?
android - Delphi xe5 JNI: ClassNotFoundException
stackoverflow ( http://www.pclviewer.com/android/androidJNI.html ) で提供されているチュートリアルに従って、デバイス固有のライブラリをインポートしてスキャナー (Honeywell 70e Black) を処理しました。
TJDexClassLoader は正しくインスタンス化されますが (nil ではありません...)、必要な内部クラスをロードできません...
私は日食の下でライブラリを開き、文字列を何度もチェックしましたが、問題はありませんでしたが、次の例外が発生しました:
それが機能する場合、すぐに新しい問題に行き詰まることがわかっています。インスタンス化するクラスに Context と Handler を提供することです。その署名は次のとおりです。
アドバイスやアドバイスよろしくお願いします(^^)
java - Android クラス ローダー エラー
jar ファイルで ScreenX クラスをインスタンス化し、このサイトのすべてのソリューションを試したいのですが、実行できません。
私は2つのファイルを持っています;
コードを垂らしてみました。
これは私の plugin.jar の ScreenX クラスのコードです。
package com.example.plugins;
実用的なサンプルはありますか? 助けてください...
android - dex ファイルからメソッドを実行するときにリソースを読み取れない
コードとリソース ( ) を含む jar ファイルがありましたResourceBundle
。
そのjarを使用してAndroidスタジオで簡単なプロジェクトを作成し、コンパイルし、抽出して2番目のプロジェクトに.apk
コピーしました。classes.dex
また、抽出した .apk から 2 番目のプロジェクトにリソースをコピーしました。
2 番目のプロジェクトから、.dex ファイルからクラスをロードしました。そのクラスから (dex ファイルから) リソースを読み取るメソッドを実行すると、リソースが見つからない場合、例外がスローされます。
失敗する行:
私が実行した場合:
2番目のプロジェクトから(dex内からではなく)、問題なく動作します-リソースを取得します。
アイデアはありますか?
ありがとう
java - Androidでプロセスを共有するときのClassCastException
同じプロセスとユーザー ID を共有する 2 つの Android アプリケーション (アプリケーション A とアプリケーション B) を作成しました。両方のアプリケーションでジェネリック アクティビティを定義しました。GenericActivity の名前空間とクラス名は両方のアプリケーションで同じですが、内容は異なります。
したがって、アプリケーションAは
そしてアプリケーションBは
最初にアプリケーション A を起動し、次にアプリケーション A からアプリケーション B を起動します。両方のアプリケーションのクラスローダーが異なるため、両方のアプリケーションを起動すると、GenericActivity クラスの 2 つのコピーが各クラスローダーに関連付けられていることがわかります。次に、各アプリケーションに関連付けられます。ここまでは順調ですね。
ここで、両方のアプリをバックグラウンドで実行し、アプリケーション A を強制終了します。次に、アプリケーション A を再起動します。アプリケーション AI には、このようなコードを持つフラグメントがあります。
ここに問題があります。ここでクラスキャスト例外が発生します。デバッグ後、アプリケーション B の GenericActivity にキャストしようとしていることがわかりました。別のクラス ローダーによってロードされた別のクラスであるため、クラス キャスト例外が発生します。私の理解では、アプリケーション A を強制終了して再起動すると、クラスローダーを介して GenericActivity のコピーが再度読み込まれるはずです。アプリケーション B の GenericActivity を使用しようとしているのはなぜですか?
java - BroadcastreceiverのAndroid DexClassLoader?
BroadcastReceiver のクラスを動的にロードしようとしていますが、この問題で 2 週間以上立ち往生しています。それは私を夢中にさせ、プロジェクトは締め切りに近づいています。
どんな助けでも感謝します。
このコードを使用して、dex クラス ローダーを呼び出します。
次に、上記のコードでこのクラスを呼び出します。
次に、このクラス UserRun が MyOnBootReceiver.class を呼び出します
そのため、DexClassLoader は UserRun クラスのロードに成功しましたが、UserRun クラスは MyonBootReceiver.class を呼び出すことができませんでした。
logcat では、UserRun クラスの実行後にエラーや何も返されません。
それは成功を示します:
しかし、これはロードされません:
MyOnBootReceiver.class コンテンツ:
このチュートリアルに従って、このプロジェクトをビルドします。
理論的にはこれでうまくいくはずです
また、ここに Manifest.xml があります。
Shelvin Suggestion からの LOG CAT (エラー):
android - java.lang.UnsupportedOperationException: クラス ローダーがサポートされていません - Android マルチ dex の問題
多くの JAR を使用する Android アプリがあり、65K メソッドの制限に達しました。この問題を解決するために、multi-dex オプションをサポートする Android Maven Plugin 4.0.0-rc.1 を使用しました。複数のdexファイルを含むAPKファイルを生成できました。classes.dex および classes2.dex です。
ただし、このアプリをタブレットにインストールして実行すると、次の例外が発生します。
PR https://github.com/jayway/maven-android-plugin/pull/425で指定されているものと同じ Dexter クラスを使用しています。
MiApplication のスニペットを以下に示します -
Dexter クラスのロードに使用していたクラスローダーを印刷しましたが、PathClassLoader を使用しているようです。
Dexter クラスは、DexClassLoader 以外からロードされた場合、「サポートされていないクラスローダー」例外をスローします。
Dexter クラスが DexClassLoader から確実にロードされるようにするにはどうすればよいですか? この「サポートされていないクラスローダー」の問題を解決するにはどうすればよいですか?