안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 질문 드러갑니다.
A.apk 파일 내부의 /assets 폴더 안에 있는 B.apk 파일을 실행하여 install 하려고 합니다.
일단 B.apk 파일 용량은 1.78M 이고 이미지 및 xml , 소스 합해서 파일 갯수는 대략 200개 정도 됩니다.
install 하는 코드는 V3모바일에서 제공하는 가이드 문서를 따라했구요 실제 소스는 아래와 같습니다.
위 코드를 실행하면 겔럭시 2.1, 2.2 잘설치되구요 넥S 2.3 도 잘돌아갑니다.
헌데 이자르 2.2 시리우스 2.2 에서는 화면에 구문 분석 오류 라고 뱉더라구요.
이자르에서도 아예 안되는게 아니라 소스크기를 줄이거나 하면 또 됩니다.... 한 마디로 돌겠습니다....
아래는 이자르 폰에서 실행시 로그켓에 올라오는 오류 입니다.
WARN/PackageParser(2741): Unable to read AndroidManifest.xml of /data/data/com.hsm.testa/files/WalletPointMOA.apk
WARN/PackageParser(2741): java.io.FileNotFoundException: AndroidManifest.xml
A.apk 파일 내부의 /assets 폴더 안에 있는 B.apk 파일을 실행하여 install 하려고 합니다.
일단 B.apk 파일 용량은 1.78M 이고 이미지 및 xml , 소스 합해서 파일 갯수는 대략 200개 정도 됩니다.
install 하는 코드는 V3모바일에서 제공하는 가이드 문서를 따라했구요 실제 소스는 아래와 같습니다.
private void setupB(){
String logTag = "log";
int i;
long l;
InputStream fIn = null;
BufferedInputStream bis = null;
DataInputStream inputFile = null;
BufferedOutputStream buffer = null;
try {
fIn = getAssets().open("B.apk");
bis = new BufferedInputStream(fIn);
inputFile = new DataInputStream(bis);
FileOutputStream apkFile = openFileOutput("B.apk",
Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
buffer = new BufferedOutputStream(apkFile);
}catch (IOException e){
Log.i(logTag, "V3 install error IOException 1 :" + e.getMessage());
}catch (IllegalArgumentException ex){
Log.i(logTag, "V3 install error IllegalArgumentException 1:" + ex.getMessage());
}catch (Exception ex){
Log.i(logTag, "V3 install error Exception 1:" + ex.getMessage());
}
try {
int len = inputFile.available();
Log.d(logTag, "len "+len);
byte[] bBuf = new byte[len];
Log.d(logTag, "bBuf "+bBuf.length);
// if((i = inputFile.read(bBuf)) != -1);
for(l = 0L; (i = inputFile.read(bBuf)) != -1; l += i ){
buffer.write(bBuf, 0, i);
}
}catch (IOException e){
e.getStackTrace();
e.getMessage();
System.out.println(" "+e.getStackTrace());
Log.i(logTag, "V3 install error IOException 2:" + e.getMessage());
}catch (IllegalArgumentException ex){
Log.i(logTag, "V3 install error IllegalArgumentException 2:" + ex.getMessage());
}catch (Exception ex){
Log.i(logTag, "V3 install error Exception 2:" + ex.getMessage());
}finally{
try {
buffer.close();
inputFile.close();
bis.close();
fIn.close();
} catch (Exception e) {
// TODO: handle exception
}
}
// V3 Mobile+ 제품 설치
// 경로 : data/data/패키지명/files/AhnLabV3MobilePlus.apk
try {
File apkFile = new File("data/data/com.hsm.testa/files/B.apk");
Uri apkUri = Uri.fromFile(apkFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType( apkUri, "application/vnd.android.package-archive");
startActivity(intent);
} catch (Exception e2) {
Log.i(logTag, "V3 install error :" + e2.getMessage());
}
}위 코드를 실행하면 겔럭시 2.1, 2.2 잘설치되구요 넥S 2.3 도 잘돌아갑니다.
헌데 이자르 2.2 시리우스 2.2 에서는 화면에 구문 분석 오류 라고 뱉더라구요.
이자르에서도 아예 안되는게 아니라 소스크기를 줄이거나 하면 또 됩니다.... 한 마디로 돌겠습니다....
아래는 이자르 폰에서 실행시 로그켓에 올라오는 오류 입니다.
WARN/PackageParser(2741): Unable to read AndroidManifest.xml of /data/data/com.hsm.testa/files/WalletPointMOA.apk
WARN/PackageParser(2741): java.io.FileNotFoundException: AndroidManifest.xml
04-11 13:04:30.546: INFO/ActivityManager(176): Starting activity: Intent { act=android.intent.action.VIEW dat=file:///data/data/com.hsm.testa/files/WalletPointMOA.apk typ=application/vnd.android.package-archive cmp=com.android.packageinstaller/.PackageInstallerActivity }
04-11 13:04:30.626: INFO/ActivityManager(176): Start proc com.android.packageinstaller for activity com.android.packageinstaller/.PackageInstallerActivity: pid=2741 uid=10030 gids={}
04-11 13:04:30.646: INFO/PowerManagerService(176): acquireWakeLock flags=0xa tag=KEEP_SCREEN_ON_FLAG
04-11 13:04:30.646: INFO/PowerManagerService(176): printWakeLockTag. mLocks.size:3
04-11 13:04:30.646: INFO/PowerManagerService(176): (0) PARTIAL_WAKE_LOCK 'Tethering.mTetheringWakeLock' activated (minState=0)
04-11 13:04:30.646: INFO/PowerManagerService(176): (1) PARTIAL_WAKE_LOCK 'ActivityManager-Launch' activated (minState=0)
04-11 13:04:30.646: INFO/PowerManagerService(176): (2) SCREEN_BRIGHT_WAKE_LOCK 'KEEP_SCREEN_ON_FLAG' activated (minState=3)
04-11 13:04:30.806: ERROR/filemap(2741): mmap(0,0) failed: Invalid argument
04-11 13:04:30.816: WARN/zipro(2741): Unable to map '/data/data/com.hsm.testa/files/WalletPointMOA.apk': Invalid argument
04-11 13:04:30.816: WARN/PackageParser(2741): Unable to read AndroidManifest.xml of /data/data/com.hsm.testa/files/WalletPointMOA.apk
04-11 13:04:30.816: WARN/PackageParser(2741): java.io.FileNotFoundException: AndroidManifest.xml
04-11 13:04:30.816: WARN/PackageParser(2741): at android.content.res.AssetManager.openXmlAssetNative(Native Method)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:485)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:453)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.content.pm.PackageParser.parsePackage(PackageParser.java:396)
04-11 13:04:30.816: WARN/PackageParser(2741): at com.android.packageinstaller.PackageUtil.getPackageInfo(PackageUtil.java:79)
04-11 13:04:30.816: WARN/PackageParser(2741): at com.android.packageinstaller.PackageInstallerActivity.onCreate(PackageInstallerActivity.java:242)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.os.Handler.dispatchMessage(Handler.java:99)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.os.Looper.loop(Looper.java:123)
04-11 13:04:30.816: WARN/PackageParser(2741): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-11 13:04:30.816: WARN/PackageParser(2741): at java.lang.reflect.Method.invokeNative(Native Method)
04-11 13:04:30.816: WARN/PackageParser(2741): at java.lang.reflect.Method.invoke(Method.java:521)
04-11 13:04:30.816: WARN/PackageParser(2741): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:881)
04-11 13:04:30.816: WARN/PackageParser(2741): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:639)
04-11 13:04:30.816: WARN/PackageParser(2741): at dalvik.system.NativeStart.main(Native Method)
04-11 13:04:30.816: WARN/PackageInstaller(2741): Parse error when parsing manifest. Discontinuing installation
04-11 13:04:31.076: INFO/ActivityManager(176): Displayed activity com.android.packageinstaller/.PackageInstallerActivity: 454 ms (total 454 ms)
04-11 13:04:32.356: INFO/ActivityManager(176): No longer want kvp.jjy.MispAndroid320 (pid 2665): hidden #16
04-11 13:04:32.596: DEBUG/SHOW_CM(319): State Chk
혹시 빠트린거 있나해서 v3모바일 디컴파일해서 manifest.xml 까지 봤는데 android:sharedUserId 옵션 설정 된거 말곤 다른게 없더군요..
이 옵션은 크게 상관없는걸로 알고 있는데 혹시나해서 A 와 B에 동일한 sharedUserId 줘서 테스트 해봤는데 안되네요 ..
이유를 알고 계신분 좀 가르쳐 주십시오 ..
어플 인스톨이야 다른 방법으로 하면 되지만 정말 궁금해서 질문 드립니다.
댓글 써주시는분께 미리 감사드립니다.



