프로그램별로 .apk 파일을 다운로드 한 다음 해당 활동을 시작해야합니다. . 내가 사용하고 코드는 다음과 같은Android에서 다운로드 한 .apk 파일이 손상되었습니다.
private String downloadFile(String sourceURL, String destinationPath)
{
try {
URL url = new URL(sourceURL);
URLConnection connection = url.openConnection();
connection.connect();
// download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(destinationPath);
byte data[] = new byte[1024];
int count;
while ((count = input.read(data)) > 0) {
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
// 여기에 편집 : 파일 RW를 확인하십시오, 그렇지 않으면 APK 파일이 설치되지 않습니다 Runtime.getRuntime() 간부 ("chmod를 666"+의 DestinationPath) ;
message = "OK";
}
catch (MalformedURLException e) {
message = "Malformed URL error: " + e.getMessage();
}
catch (ProtocolException e) {
message = "Protocol exception error: " + e.getMessage();
}
catch (FileNotFoundException e) {
message = "File not found error: " + e.getMessage();
}
catch (IOException e) {
e.printStackTrace();
message = "Failed to download the file : " + e.getMessage();
}
return message;
}
내가 먼저 텍스트 파일과 그 다음 apk 파일을위한 메소드를 호출한다고 언급했습니다. 따라서 파일을 로컬에서 처리 할 때마다 어떻게 든 잘못되거나 잘못되었다는 것을 알게됩니다. 이 방법으로 나는 텍스트 파일이 올바르게 다운로드되었음을 안다. 그러나 .apk 파일이 손상되었습니다. DDMS와 로컬 호스트 (IP : 10.0.2.2)에 대한 액세스 권한을 가지고 로컬로 개발하기 때문에 나는 그 원인이 위의 코드라는 것을 확고하게 말할 수 있습니다. DDMS를 통해 원래의 .apk 파일로 인위적으로 '다운로드 한'파일을 대체하면 다음에 나오는 모든 처리가 정상적으로 처리됩니다. 또한 원본과 다운로드 한 .apk 파일을 비교할 때 별 차이가 있습니다. 내가 뭘 잘못하고 있니? 감사합니다. 추 신 : 검색 중, 인기있는 문제인 반면, 일관된 답이 없음을 깨달았습니다. 필자의 경우에는 다운로드 방법의 문제로 간주했습니다.
서버가 APK를 바이너리로 보내고 있습니까? Content-Type 헤더의 값은 무엇입니까? – Rajesh
흥미 롭습니다. setRequestProperty를 바이너리로 제안 하시겠습니까? 그렇다면 올바른 매개 변수는 무엇입니까 (오히려 응용 프로그램 형식 지향적 인 것 같습니다). connection.setRequestProperty ("content-type", "multipart/form-data")와 같은 것일 수 있습니까? –
sourceURL의 유형은 무엇입니까? HTTP 요청입니까? 어디에서 파일을 다운로드하고 있습니까? 서버 코드에 Content-Type 헤더를 설정해야합니다. – Rajesh