ネイティブコードのバイナリを含むPlayストアからAPKをダウンロードしました。 APKファイルには、lib/x86
フォルダがあります。このフォルダには、ネイティブプロシージャを含むライブラリファイル(通常は.so拡張子)が含まれています。コードはx86であるため、Javaプログラムを記述してデスクトップ上のライブラリを呼び出すことは可能ですか?あなたがそのライブラリのソースコードを持っていなくても。 NDK関数はパラメータを受け取り、値を返すだけです。たとえば、書き込むことができますLinuxデスクトップでAndroid NDKバイナリを実行しています
class AppNativeLoader
{
public static native void generateRand(int seed);
static
{
System.loadLibrary("AndroidNDKLib");
}
}
public class WCallTest
{
public static void main(String[ ] args)
{
long seed = System.currentTimeMillis();
if(args.length > 0) {
seed = Long.valueOf(args[0]);
}
long rand = AppNativeLoader.generateRand(seed);
System.out.println(rand);
}
}
注:これは単なる例です。実際の環境は異なります。 RHELでJRE 7を使用して、x86の.soを展開し、.classファイルと同じディレクトリに配置しました。私はまだUnSatisfiedLinkerError
を得る。何か気まずい?コールバックがなく、関数がAndroid APIを利用していないと仮定すると、これは可能ですか?
編集:私は、IDA Proでlibが開かれて、私は次の依存
.plt:0000B100 ; Needed Library 'liblog.so'
.plt:0000B100 ; Needed Library 'libz.so'
.plt:0000B100 ; Needed Library 'libc.so'
.plt:0000B100 ; Needed Library 'libm.so'
.plt:0000B100 ; Needed Library 'libstdc++.so'
.plt:0000B100 ; Needed Library 'libdl.so'
これらはなし、私のデスクトップ環境で利用可能であるべきであるのを見ましたか?
次に、なぜAPKにx86ライブラリが提供されていますか? Windows BlueStacksエミュレータの仕組みは? UnsastifiedLinkerErrorに互換性がないという症状が出ていますか? – Nederealm
私はIDA PROでライブラリを開きました。私は以下の依存関係を見ました。plt:0000B100;必要なライブラリ 'liblog.so' .plt:0000B100;必要なライブラリ 'libz.so' .plt:0000B100;必要なライブラリ 'libc.so' .plt:0000B100;必要なライブラリ 'libm.so' .plt:0000B100;必要なライブラリ 'libstdC++。so' .plt:0000B100;必要なライブラリ 'libdl.so' – Nederealm
x86のAndroidデバイスがあるためです。 –