2013-06-29 10 views
8

Vorrei pacchettizzare un'applicazione Android commandline nativa in un apk. Ho creato un'applicazione con ndk-build che usa jni/Android.mk. L'output è in libs/armeabi/<MyApp>. Ho anche l'apk building con formica. Tuttavia, l'apk non sembra raccogliere l'applicazione della riga di comando. Se decomprimo l'apk, l'app non è lì.Come impacchettare un'applicazione nativa della linea di comando in apk?

Che cosa devo fare per ottenere formica per includere un'applicazione a riga di comando pre-costruito?

Inoltre, che cosa devo fare in modo che corre formica NDK-costruire? (Questo è stato già risposto: Android NDK build with ANT script)

risposta

10

Vedi Android NDK build with ANT script.

È possibile aggiungere il binario all'APK utilizzando aapt se Ant non lo copia automaticamente da libs/armeabi, vedere Documentation for aapt element in Ant script.

credo che il file verrà correttamente estratto /data/data/your.package.full.name/lib, con le autorizzazioni eseguibili.

Ant comporta un passo chiamato "ApkBuilder", che aggiunge solo i file da libs/armeabi che pattern match ^.+\.so$ o gdbserver - quest'ultimo solo per build di debug.

Ma non basta rinominare il file eseguibile per "myexecutable.so": questo file non verrà estratto dal programma di installazione APK sul dispositivo.

E 'sufficiente rinominare il file eseguibile per "lib myexecutable .so": questo file verrà estratto dal APK installatore Package Manager sul dispositivo per /data/data/your.package.full.name/lib, con le autorizzazioni eseguibili.

Personalmente, come per dare a questo non-realtà-a-libreria un nome speciale, per esempio lib...ffmpeg...so.

+0

Ho fatto questo, sicuro di poter aggiungere un task ant per eseguire ndk-build e funziona. Ant non copia automaticamente l'eseguibile. Posso anche aggiungere il binario con aapt (sia da riga di comando o formica). Sfortunatamente, l'apk risultante non viene installato? (errore manifesto di qualche tipo) L'eseguibile è sicuramente nell'apk, come può essere controllato con unzip. Questo è stato utile, ma non svolge completamente il lavoro, hai altri suggerimenti? –

+0

@Alex quale errore manifest? Può essere più preciso? –

+0

OK, ecco un modo per ingannare: chiamare il file eseguibile "gdbserver", e sarà sia confezionato in modo corretto a 'lib/armeabi' nel APK, e installato al' /data/data/your.package.name/lib' directory sul dispositivo. Come hai notato, ci sono due ostacoli. Uno, aggiungendo il binario all'APK, può essere eseguito come un passo ANT personalizzato, ma dovresti aver cura di averlo lì prima che l'APK sia firmato. Il secondo passaggio, sul dispositivo, potrebbe essere più complicato. –

2

In generale, si dovrebbe mettere la vostra linea di comando applicazione nella cartella Assets, quindi utilizzare AssetManager al fine di estrarre il vostro bene (non dimenticate di chmod dopo l'estrazione!). Ma ci sarà un problema dove estrarlo, perché non tutte le directory di Android possono memorizzare i binari eseguibili. Su Android 2.2 ho provato /cache e funziona. Non posso dire per i nuovi Androidi. Siamo spiacenti, non posso dare consigli riguardo a formica.

+0

io sto cercando di fare questo per Android 4.0/4.1/4.2. Binari eseguibili in/dati/lavoro locale. –

+3

/data/local è scritto (e molto probabilmente anche letto) limitato su molte versioni di Android. Probabilmente il posto migliore per mettere è nel ammasso privato di un app, ma impostare le autorizzazioni sul file globalmente leggibile e eseguibile se l'intento è di condividere con altre applicazioni o l'adb shell. –

Problemi correlati