2013-06-29 10 views
8

Chciałbym spakować aplikację natywną dla Androida do apk. Mam budowanie aplikacji z ndk-build, która używa jni/Android.mk. Dane wyjściowe znajdują się w bibliotece libs/armeabi/<MyApp>. Mam również budynek apk z mrówką. Jednak wydaje się, że apk nie pobiera aplikacji linii poleceń. Jeśli rozpakuję apk, aplikacja nie jest dostępna.Jak spakować natywną aplikację linii poleceń w apk?

Co muszę zrobić, aby uzyskać dostęp do gotowej aplikacji z wiersza poleceń?

Co powinienem zrobić, aby ant uruchamiał ndk-build? (To już odpowiedział: Android NDK build with ANT script)

Odpowiedz

10

Zobacz Android NDK build with ANT script.

Możesz dodać plik binarny do APK używając aapt, jeśli Ant nie skopiuje go automatycznie z libs/armeabi, patrz Documentation for aapt element in Ant script.

Wierzę, że plik zostanie poprawnie wyodrębniony do /data/data/your.package.full.name/lib, z uprawnieniami do wykonywania.

Ant kompilacji obejmuje etap o nazwie „ApkBuilder”, co tylko dodaje pliki z libs/armeabi że wzór mecz ^.+\.so$ lub gdbserver - ten ostatni tylko dla debugowania kompilacji.

Ale to nie wystarczy, aby zmienić nazwę pliku wykonywalnego do „myexecutable.so”: plik zostanie rozpakowany instalator APK na urządzeniu.

To wystarczy, aby zmienić nazwę pliku wykonywalnego do "lib myexecutable .so" Ten plik zostanie rozpakowany przez APK instalatora Package Manager w urządzeniu do /data/data/your.package.full.name/lib, z uprawnieniami wykonywalnych.

Ja osobiście lubię nadawać tej nie-właściwie-bibliotece jakiejś specjalnej nazwie, np. lib...ffmpeg...so.

+0

Zrobiłem to, jestem pewien, że mogę dodać zadanie ant do uruchomienia ndk-build i to działa. Ant nie kopiuje automatycznie pliku wykonywalnego. Mogę również dodać plik binarny z aapt (z linii poleceń lub z ant). Niestety wynikowa apk nie instaluje się? (oczywisty błąd jakiegoś rodzaju) Plik wykonywalny jest zdecydowanie w apk, co można sprawdzić przy rozpakowywaniu. To było pomocne, ale nie całkowicie wykonało zadanie, czy masz więcej sugestii? –

+0

@Alex co manifest błąd? Czy mógłbyś to sprecyzować? –

+0

OK, tutaj jest sposób na oszukiwanie: wywołaj twój plik wykonywalny "gdbserver" i będzie on poprawnie spakowany do katalogu 'lib/armeabi' w pakiecie APK i zainstalowany do' /data/data/twoj.package.name/lib' katalog na urządzeniu. Jak zauważyłeś, istnieją dwie przeszkody. Jeden, dodając plik binarny do pliku APK, może być wykonany jako niestandardowy krok ANT, ale powinieneś zadbać o jego obecność przed podpisaniem pliku APK. Drugi krok na urządzeniu może być trudniejszy. –

2

W ogóle, należy umieścić swoją aplikację poleceń do Assets folderu, a następnie użyć AssetManager w celu wydobycia zasobu (nie zapomnij chmod to po ekstrakcji!). Ale nie będzie problemu, skąd go rozpakować, ponieważ nie każdy katalog w systemie Android może przechowywać pliki wykonywalne. W systemie Android 2.2 próbowałem /cache i to działa. Cann't powiedzieć dla nowszych Androidy. Niestety, nie można podać żadnych zaleceń dotyczących mrówki.

+0

Próbuję zrobić to dla Androida 4.0/4.1/4.2. Pliki binarne wykonywalne w/data/local work. –

+3

/data/local jest zapisywane (i całkiem możliwe, że również czytane) w wielu wersjach Androida. Prawdopodobnie najlepszym miejscem do umieszczenia go jest prywatne przechowywanie aplikacji, ale ustaw uprawnienia do pliku na globalnie czytelny i wykonywalny, jeśli ma zamiar udostępnić go innym aplikacjom lub powłoce adb. –

Powiązane problemy