は私が同じニーズを持っていたし、重い研究の2日後、私は、この問題に対する解決策を思い付きました。それは簡単ではなく、Androidシステムコードも変更できる必要があります。
基本的に、PackageManagerServiceは、システムアプリケーションが更新されていない限り、ネイティブバイナリ(.soファイル)をアンパックするのを防ぎます。ですから、これを修正する唯一の方法は、PMS.javaを修正することです(この問題を解決しようとして以来、私はひどい気分になっています)。システムの最初の起動時に
、私はisPackageNative(PackageParser.PackageのPKG)関数を記述することでネイティブバイナリのためのすべてのシステムパッケージをチェックしてください。
private boolean isPackageNative(PackageParser.Package pkg) throws IOException {
final ZipFile zipFile = new ZipFile(pkg.mPath);
final Enumeration<? extends ZipEntry> privateZipEntries = zipFile.entries();
while (privateZipEntries.hasMoreElements()) {
final ZipEntry zipEntry = privateZipEntries.nextElement();
final String zipEntryName = zipEntry.getName();
if(true) Log.e(TAG, " Zipfile entry:"+zipEntryName);
if (zipEntryName.endsWith(".so")) {
zipFile.close();
return true;
}
}
zipFile.close();
return false;
}
この関数は、ネイティブライブラリのため、それが持っている場合は、すべてのパッケージをチェックします1つ、私はそれを解凍します。 PMSはscanPackageLI(....)でこのチェックを行います。メソッド内で次のコードを検索します。
if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg))
を入力し、isPackageNative(pkg)チェックを追加します。他にも小さな変更が必要ですが、あなたがこの方向性を持っていればそれを理解するでしょう。それが役に立てば幸い!
技術的には、.soファイルを/data/data/com.yourpackage.name/libディレクトリにコピーする必要がありますが、インストール済みのアプリで同じ問題が発生していますAPK。 – Devunwired
私たちは、7zipのようなzipツールを使用して、APKからsoファイルを手動で解凍しただけです。次に、アンドロイドのソースコードをコンパイルしながら、ファイルを/out/..../system/libディレクトリにコピーするmakeファイルを作成しました。私たちの場合、それはネイティブのアプリケーションが必要とするので、ROMイメージに含めることを望んでいます。そのため、/ system/libディレクトリにコピーする必要があります。 – artsylar
このフォーラムを参照するにはhttps://groups.google.com/group/android-ndk/browse_thread/thread/2d08a95b3038e532?hl=ja 彼らと同じ問題がありました – artsylar