1

暗号化された jar ファイルを動的にロードしたい。Dex ファイルを動的にロードしましたが、正常に動作します。エミュレータとAndroidデバイスの両方で試しました。今、暗号化されたファイルをロードしたいと思います。私が理解している限り、クラスローダーをカスタマイズして、ファイルを実行する前にその場で復号化できるようにする必要があります。

誰かがこれを実際に実装する方法を教えてくれたらうれしいです。私にはアイデアがありますが、経験豊富なプログラマーではありません。

前もって感謝します

public class MainActivity extends Activity {

@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        final String libPath = Environment.getExternalStorageDirectory() + "/shoaib.jar";
        final File tmpDir = getDir("dex", 0);

        final DexClassLoader classloader = new DexClassLoader(libPath, tmpDir.getAbsolutePath(), null, this.getClass().getClassLoader());
        final Class<Object> classToLoad = (Class<Object>) classloader.loadClass("com.example.custom.MyClass");

        final Object myInstance  = classToLoad.newInstance();
        final Method doSomething = classToLoad.getMethod("doSomething");

        doSomething.invoke(myInstance);

    } catch (Exception e) {
        e.printStackTrace();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

4

1 に答える 1

0

ADexClassLoaderは aですので、暗号化を処理できるan を記述できるようにClassLoaderする必要があります (私はこれを行っていません! ) 。EncryptedDexClassLoader extends DexClassLoader

特に、 ClassLoader の保護されたメソッドを見ると、getResourceAsStream()どのように進めればよいかがわかります。すべての保護されたメソッドをオーバーライドし、実装を呼び出しsuper.ますが、それらのパラメーターをログに記録 (および結果を報告) して、それらがどのように使用されているかを把握することをお勧めします。

于 2013-09-17T20:25:33.090 に答える