주어진 경로에서 Java 소스 코드가 들어있는 디렉터리로 APK 파일을 프로그래밍 방식으로 만들고 싶습니다. 이것이 명령 행에서 안드로이드 도구를 사용하여 수행 할 수 있다는 것을 알고 있지만 Java 코드로 어떻게 할 수 있습니까? 내가 코멘트에서 언급 한 바와 같이프로그래밍 방식으로 APK 보관 파일에 파일을 패키지화하는 방법
답변
, 빌드 프로세스의 많은, 당신은 자바 포트 위치에있을 가능성이 명령 줄 바이너리, 같은 javac
로에서 dx
및 aapt
를 처리 .
제가 신발을 신은다면 Gradle의 IDE 통합 후크를보고 해당 build.gradle
및 관련 파일을 사용하여 Java 코드에서 빌드 프로세스를 유도 할 것입니다. One True Build Automation System으로 Gradle을 사용할 수 있다는 것은 Gradle for Android의 핵심 요소 중 하나입니다.
그렇지 않으면 안드로이드 (Gradle, Ant, Maven 및 Eclipse 빌드 프로세스 항목)의 기존 빌드 자동화 옵션을 사용하지 말고 또 다른을 빌드하는 것이 좋습니다. 여유가있는 수십 달의 개발자 개월이 있고 그 길로 가고 싶다면 그렇게 할 수 있습니다. 당신은 위에서 언급 한 아이디어 구현을보고 싶을 것이다.
지금 당신의 요지를 얻었을 것입니다. 그러나 그것은 제가 생각하기에 이미 Maven을 사용하고 있기 때문에 제가 고집한다면 더 좋을 것이라고 생각합니다. Gradle 대신 Maven을 사용하십시오 아니면 Gradle 방식을 사용 하시겠습니까? – Pawan
@Pawan : I Android에 대한 Maven 지원에 대한 경험이 없으므로 Gradle과 비교하여 언급 할 수 없습니다. 즉, 나는 자신의 것을 만드는 것이 더 나은 해결책이라고 확신합니다. – CommonsWare
안드로이드 apk를 빌드하는 방법을 정의하는 Ant 파일의 소스 코드를 가르쳐 주시겠습니까? 또는 그 문제에 대한 Gradle 플러그인? – Pawan
나는 비슷한 관심사가 있었지만 약간의 연구 끝에 Java (Eclipse)에서 명령 줄을 호출 한 다음 필자가 사용한 명령을 인수로 사용하여 결과를 얻었습니다. 나는 이것을 구축하기를 원하는 모든 프로젝트마다 반복했다.
http://geosoft.no/development/android.html이 사이트는 명령 줄에서 Android 프로그램을 제작할 때 따라야 할 모든 단계를 보여줍니다. 저는 .apk 부분에 대해서만 염려했기 때문에 14 단계에서 충분했지만 전체 페이지를 확인할 수 있습니다. APK는 해당 페이지에서, 나는 ProcessBuilder를 코드 생성 명령을 사용하여
: ANDROID_HOME이 SDK 경로가
ProcessBuilder pb = new ProcessBuilder
(new String[] {ANDROID_HOME + "\\build-tools\\android-4.4W\\aapt.exe",
"package",
"-v",
"-f",
"-M", projectRootDirPath + "\\AndroidManifest.xml",
"-S", projectRootDirPath + "\\res",
"-I", ANDROID_HOME + "\\platforms\\android-20\\android.jar",
"-F", projectRootDirPath + "\\bin\\" + [APK_file_name] + ".apk",
projectRootDirPath + "\\bin"});
입니다
는 projectRootDirPath는 프로젝트 디렉토리의 경로이며, 물론 [APK_file_name] 원하는 이름이어야합니다 .apk 파일 용.또한 사용중인 버전에 따라 "android-4.4W"및 "android-20"부품을 변경해야 할 수도 있습니다.
달성하려는 목표는 무엇입니까? Java에서 APK를 만들 수 없습니다. – Booger
명령 줄을 통해이 작업을 수행 할 수 있다는 것을 알고 있다면 Java에서 명령 줄을 호출 해보십시오. –
@Booger 디렉토리를 APK 보관소에 패키지하려고합니다. Java에서 정확히 수행 할 수없는 이유는 무엇입니까? 그것은 zip과 같은 단순한 아카이브 일뿐입니다. – Pawan