32ビットと64ビットの.soファイルをアプリケーションに混在させる方法

Carmelo M 09/15/2017. 1 answers, 84 views
java android android linux android-ndk android-ndk ndk-build

まず、アプリケーションでは.soファイルの異なるアーキテクチャを混在して使用することはできません(Partは32のみ、他の部分は64のみを使用します)

だから、私は動的に64と32ビットのファイルを読み込むために新しいプロセスをSystem.load()としましたが、 System.load()はエラーを投げ、アプリケーションはクラッシュしました! どのように複数のプロセスを通じてこの問題を解決するには? あるいはこれを解決する他の方法はありますか?

5 Comments
Markus 07/27/2017
ようこそ! しばらく時間をかけてヘルプページ 、特に「ここではどのトピックを聞くことができますか?」というセクションを読んでください 「どのような種類の質問を避けるべきですか?」 。 また、 ツアーに参加し良い質問をする方法についてもお読みください。 最後に、 最小、完全、および検証可能な例の作成方法を学んでください。 エラーの詳細は大いに役立ちます。
Alex Cohn 07/27/2017
それはクールなアイデアです! しかし、どのような子プロセスを開始したいですか? サービス? システムがあなたのAPKの分析に基づいて32ビットモードをオンにするかどうかを決定するので、これが機能するとは思えません。それに応じてJVMが設定されます。
Alex Cohn 07/27/2017
stackoverflow.com/a/31879900/192373を参照してください: pmはアプリのインストール中にABIを強制することができます。
Carmelo M 07/28/2017
@AlexCohnありがとう! 私はあなたに同意します、子プロセス(アクティビティ)はこの問題を解決できません。私は関数の一部が32ビットの.soを使いたいので、動作しません。関数は、同じアプリケーションで64ビットの.soを使用します。
Carmelo M 07/28/2017
@AlexCohn他のアイデアはありますか? マスター

1 Answers


Alex Cohn 07/30/2017.

さて、私は試しました。 これには、通常の方法でarmeabi共有ライブラリを使用し、Runtime.exec()を使用してJavaから、またはsystem()を使用してCからarm64-v8a実行可能ファイルを実行します。

実行可能ファイルをアセットに入れて手動で解凍するか、 チートして名前を変更してlibで始まり、 .soで終わるようにすることができます。 このファイルをjniLibs/armeabiディレクトリーに入れることができます。

逆の方法でも動作します:64ビットアプリケーションから32ビットの実行ファイルを起動します( -fPIE忘れないで-fPIE )。

ライブラリ検索パスが衝突しないことを確認してください。

2 comments
Carmelo M 08/04/2017
それはクールなアイデアです! 私のプロジェクトはビデオトランスコードのバックグラウンド操作と似ていませんが、SurfaceViewを使って3次元グラフィックスをロードして、ユーザージェスチャーとやりとりする必要があります。 どのようにこれらのUIの対話に対処するのが大きな問題です、私はあなたに私にいくつかのアイデアを与えることができることを願って、ありがとう
Alex Cohn 08/04/2017
私はあなたがUIを処理したり、プロセス間通信を通じてライブグラフィックを実行することはできないと思います

Related questions

Hot questions

Language

Popular Tags