java命令 apk_Android 命令:实现启动一个apk

Android.mk:

# Copyright 2008 The Android Open Source Project # LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_MODULE := launch include $(BUILD_JAVA_LIBRARY)

launch:

# Script to start "launch" on the device, which has a very rudimentary # shell. # export CLASSPATH=/system/framework/launch.jar exec app_process /system/bin com.android.commands.launch.Launch $* #export CLASSPATH=/data/launch.jar #exec app_process /data/ com.android.commands.launch.Launch $*

Launch.java:

/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */

package com.android.commands.launch;

import android.app.ActivityManager;

import android.app.ActivityManagerNative;

import android.app.IActivityController;

import android.app.IActivityManager;

import android.app.IInstrumentationWatcher;

import android.app.Instrumentation;

import android.content.ComponentName;

import android.content.Context;

import android.content.IIntentReceiver;

import android.content.Intent;

import android.content.pm.IPackageManager;

import android.content.pm.ResolveInfo; import android.net.Uri;

import android.os.Bundle;

import android.os.ParcelFileDescriptor;

import android.os.RemoteException;

import android.os.ServiceManager;

import android.os.SystemProperties;

import android.os.UserHandle;

import android.util.AndroidException;

import android.view.Display;

import android.view.IWindowManager;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.net.URISyntaxException;

import java.util.HashSet;

import java.util.List;

import android.util.Log;

import android.content.pm.ApplicationInfo;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.content.pm.PackageUserState;

import android.content.pm.PackageParser;

import android.util.DisplayMetrics;

/** * Launch */

public class Launch

{

private static final String TAG = "Launch";

private IPackageManager mPM;

private IActivityManager mAm;

/** * Command-line entry point. * * @param args The command-line arguments */

public static void main(String[] args){

(new Launch()).run(args); }

private void init(){

IPackageManager mPM = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));

mAm = ActivityManagerNative.getDefault();

}

private void run(String[] args) {

init();

if (args.length < 1) {

showUsage(); return; }

String command = args[0];

if(args.length == 1){

PackageInfo info = getPackageArchiveInfo(command, PackageManager.GET_ACTIVITIES);

if(info != null){

ApplicationInfo appInfo = info.applicationInfo;

String packageName = appInfo.packageName;

String className = info.activities[0].name;

log("-->packageName=" + packageName);

log("-->className=" + className);

log("-->all activities:");

for(int i = 0; i < info.activities.length; i++){

log(info.activities); }

startApp(packageName, className);

//String execCmd= "am start -n " + packageName + "/" + className;

//log(execCmd);

//runLinuxCmd(execCmd);

} return ;

}

System.err.println("Error: Invalid arguments for command: " + command);

showUsage(); }

private PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags) {

PackageParser packageParser = new PackageParser(archiveFilePath);

DisplayMetrics metrics = new DisplayMetrics();

metrics.setToDefaults();

final File sourceFile = new File(archiveFilePath);

PackageParser.Package pkg = packageParser.parsePackage( sourceFile, archiveFilePath, metrics, 0);

if (pkg == null) {

return null; }

if ((flags & PackageManager.GET_SIGNATURES) != 0) {

packageParser.collectCertificates(pkg, 0); }

PackageUserState state = new PackageUserState();

return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state);

}

private Process runLinuxCmd(String cmd){

Process process = null;

try{ process = Runtime.getRuntime().exec(cmd); return process; }

catch(IOException e){ Log.d(TAG, "runLinuxCmd error:" +e); }

return process; }

private void startApp(String packageName, String className){

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName comp = new ComponentName(packageName, className);

intent.setComponent(comp);

try{

mAm.startActivityAndWait(null, intent, "", null, null, 0, 0, "", null, null, 0); }

catch(RemoteException e){

log("startApp error:" + e); }

}

private void showUsage() {

System.err.println("usage: input ..."); System.err.println(" launch

"); }

private void log(Object o){ System.err.println("" + o); }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值