0

Mac に Android ビルド環境があります。を実行すると、デプロイ用に APK ファイル内ant debugにきれいにパッケージ化されます。libandroidnative.soこれは期待どおりに機能します。

ビルド セットアップを Windows PC に移行しています。を実行するant debugと、「libandroidnative.so」を APK ファイルにパッケージ化せずに正常に完了します。

コードベースはまったく同じです。これは同じリポジトリからのプルです。NDK (r8) と SDK (2013-05-22) のバージョンはまったく同じです。

これが私のMacでの(作業中の)出力です。

res/layout/main.xml
AndroidManifest.xml
resources.arsc
res/drawable-hdpi/ic_launcher.png
res/drawable-ldpi/ic_launcher.png
res/drawable-mdpi/ic_launcher.png
res/drawable-xhdpi/ic_launcher.png
classes.dex
lib/armeabi/gdbserver
lib/armeabi/libandroidnative.so  <--- success!
lib/x86/gdbserver
lib/x86/libandroidnative.so
META-INF/MANIFEST.MF
META-INF/CERT.SF
META-INF/CERT.RSA

これが私のPCでの非動作出力です:

res/layout/main.xml
AndroidManifest.xml
resources.arsc
res/drawable-hdpi/ic_launcher.png
res/drawable-ldpi/ic_launcher.png
res/drawable-mdpi/ic_launcher.png
res/drawable-xhdpi/ic_launcher.png
classes.dex
lib/armeabi/gdbserver
lib/armeabi-v7a/gdbserver
lib/x86/gdbserver
META-INF/MANIFEST.MF
META-INF/CERT.SF
META-INF/CERT.RSA

同じことが Eclipse ビルドから発生することに注意してください。

これが私のAntビルドファイルです(コメントなし):

<?xml version="1.0" encoding="UTF-8"?>
<project name="AndroidNativeLayer" default="help">

    <property file="local.properties" />

    <property file="ant.properties" />

    <property environment="env" />
    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
        <isset property="env.ANDROID_HOME" />
    </condition>
    <loadproperties srcFile="project.properties" />

    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
            unless="sdk.dir"
    />
    <import file="custom_rules.xml" optional="true" />

    <import file="${sdk.dir}/tools/ant/build.xml" />

</project>
4

2 に答える 2

1

わかった。TLDR; ndk-build の実行によって新しいファイルが生成されるかどうかに関係なく、eclipse は新しいファイルを生成する前に古い .so ファイルを削除します。ndk-build コマンドが新しいものを作成することを確認してください。

私の場合、環境変数が特定の値に設定されている場合にのみビルドしていました。環境変数が一致しない場合にサイレントに終了するロジック ブランチが Android.mk にありました。

Linux/Mac では、次のように入力できますset SOME_VAR="foo"。Windows のバッチ ファイルでは、set と入力するSOME_VAR="foo"と、環境変数名に引用符が含まれます。

ひどい、完全に私のせいです。この質問の最初の一般的な知恵が関連している可能性があるため、質問を続けています。

また、理解する価値があります。入力aapt list bin\somepackage.apkして、元の投稿で使用したリストを生成できます。

于 2013-07-13T19:34:57.887 に答える