目前分類:APK 類 (49)

瀏覽方式: 標題列表 簡短摘要

1728_140709173736_1  

程式碼下載


shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

即使APK沒有安裝在手機上,我們也可以獲取它的某些資訊,比如包名,版本,應用圖示,activities等等,代碼如下:

MainActivity:

 

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

原文:http://developer.android.com/guide/topics/connectivity/usb/host.html

USB HOST模式开发下可能会遇到这个问题。

第一步是在AndroidManifest.xml文件中修改,主意下面红色字体

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

安卓自帶的app放在/system/app/下,當我們想要替換這些應用時可以參考如下步驟:

 

1.獲得root許可權

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://vincenttung.blog.51cto.com/6249439/1318716


shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

1.获取APK的签名信息

private String showUninstallAPKSignatures(String apkPath) {

        String PATH_PackageParser = "android.content.pm.PackageParser";

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

把你關聯的apk放在 assets目錄下面。代碼如下,只是在安裝關聯apk的時候是顯示安裝的。




view sourceprint?

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

1.要做的就是監聽系統發出的broadcast

 

 

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

1.下載
apktool.jar &
apktool-install-windows

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

Google的Android Scripting專案
SL4A, (我在自己的安卓手機上下載了
HTTP://android-scripting.googlecode.com/files/PythonForAndroid_r4.apk並安裝了,暫時還不知道怎麼使用。HTTP://code.google.com/p/android-scripting/,)開發者可以使用指令碼語言來開發Android應用,比如Python、Perl、JRuby、Lua、shell等,都可在Android上執行。不過使 用它並不能説明創建一個易安裝、自包含可執行二進位檔案的Python應用。因此,一個新的旨在讓在Android系統上發佈Python更加容易的專案 ——Python for Android推出了。

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

Android程式在publish之前都必須經過sign的動作,
閱讀前面提到的ant_rules_r3.xml的內容後,會發現有一個target是release,可以説明你編譯專案與sign你的apk,
可惜的是在執行這個target的時候,他會要求你輸入key的相關資訊,由於我想讓hudson幫我透過ant直接完成這個動作,

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

下面是一篇教學, 如何置換 APK 檔案裡的資料後, 再重新封包 APK 檔案.

 

資料來源:

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

在Android中,透過APK直接使用cmd指令與device溝通
private Process process = null;

 

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

Project->Android Tools->Export Signed Application Package adb install xxx.apk


shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;

import eric.test.R;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class main extends Activity {
        private ImageView img;
        private String archiveFilePath =Environment.getExternalStorageDirectory() + "/"+ "lindong/生活百事通之營養.apk";
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                img = (ImageView)findViewById(R.id.img);
                Drawable icon = getUninstallAPKIcon(this, archiveFilePath);
                img.setBackgroundDrawable(icon);
        }
        public static Resources getResources(Context context , String apkPath) throws Exception {  
        String PATH_AssetManager = "android.content.res.AssetManager";        
        Class assetMagCls = Class.forName(PATH_AssetManager);    
        Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null);    
        Object assetMag = assetMagCt.newInstance((Object[]) null);    
        Class[] typeArgs = new Class[1];    
        typeArgs[0] = String.class;    
        Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath",    
                typeArgs);    
        Object[] valueArgs = new Object[1];    
        valueArgs[0] = apkPath;    
        assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);  
        Resources res = context.getResources();    
        typeArgs = new Class[3];    
        typeArgs[0] = assetMag.getClass();    
        typeArgs[1] = res.getDisplayMetrics().getClass();    
        typeArgs[2] = res.getConfiguration().getClass();    
        Constructor resCt = Resources.class.getConstructor(typeArgs);    
        valueArgs = new Object[3];    
        valueArgs[0] = assetMag;    
        valueArgs[1] = res.getDisplayMetrics();    
        valueArgs[2] = res.getConfiguration();    
        res = (Resources) resCt.newInstance(valueArgs);          
        return res;  
    }  
        
        public static Drawable getUninstallAPKIcon(Context context,String apkPath) {    
            PackageManager pm = context.getPackageManager();    
                PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);          
                Resources res = null;  
                try {  
                res = getResources(context,apkPath);  
            } catch (Exception e) {  
                return null;  
            }  
            if(info != null){  
                ApplicationInfo appInfo = info.applicationInfo;  
                return res.getDrawable(appInfo.icon);   
            }  
                  
            return null;          
            } 
        

}

 

 其實關鍵還是獲取可以獲取apk內容的Resource對象

 

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

package t1.com;


shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

2ef8d167-7eb4-3b1b-8566-944a6e2087a2  

主程序

package com.example.downloadnotify;

import java.io.File;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.Toast;

public class Main extends Activity implements OnClickListener{

        String downloadUrl = "http://xxx";
        String fileDir = "/sdcard/xxx/";
        String fileName = fileDir+"xxx.apk";
        private static Button btn;  
        private Handler handler = new Handler() {};
        
        @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        btn = (Button) findViewById(R.id.button1);  
        btn.setOnClickListener(this);  
        File f = new File(fileDir);
        if(!f.exists()){
                f.mkdirs();
        }
        initBtnState();
        }  
        
        @Override
        protected void onResume() {
                // TODO Auto-generated method stub
                super.onResume();
                File f = new File(fileDir);
        if(!f.exists()){
                f.mkdirs();
        }
                initBtnState();
        }
    
        @Override
        public void onClick(View v) {
                // TODO Auto-generated method 
                btnClickAction();
        }
        
        private void initBtnState(){
                if(checkBrowser("com.explusalpha.NesEmu")){
                        //start();
                        btn.setText("打開");
                }else{
                        File file = new File(fileName);
                        if(file.exists()){
                                btn.setText("安裝");
                        }else{
                                btn.setText("下載");
                        }
                }
        }
        
        private void btnClickAction(){
                if(btn.getText().toString().equals("下載")){
                        AppFileDownUtils afd = new AppFileDownUtils(this, handler, downloadUrl, fileName);
                        String state = afd.getState().toString();
                        if(state.equals(Thread.State.NEW.name())){
                                afd.start();
                        }
                }else if(btn.getText().toString().equals("安裝")){
                        install();
                }else if(btn.getText().toString().equals("打開")){
                        start();
                }
        }
        
        private void start(){
         ComponentName componentName=new   ComponentName
         ("com.explusalpha.NesEmu","com.imagine.BaseActivity");   
        Intent intent=new Intent();   
        intent.setComponent(componentName);   
        intent.setAction(Intent.ACTION_VIEW);   
        startActivity(intent); 
   }
        
        private void install(){
                Intent intent = new Intent(Intent.ACTION_VIEW);  
        intent.setDataAndType(Uri.parse("file://"  
                +fileName),  
                "application/vnd.android.package-archive");  
        startActivity(intent);
        }
        
        public boolean checkBrowser(String packageName) {  
            if (packageName == null || "".equals(packageName))  
                return false;  
            try {  
                ApplicationInfo info = getPackageManager().getApplicationInfo(  
                        packageName, PackageManager.GET_UNINSTALLED_PACKAGES);  
                return true;  
            } catch (NameNotFoundException e) {  
                return false;  
            }  
        }  
        public static Runnable updateInstallBtn = new Runnable() {
                public void run() {
            if (btn != null) {
                btn.setText("安裝");
            }
        }
    };

}


shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

1、得到 signapk.jar  或者是javalib.jar  獲取系統簽名

可以從源碼中獲取到:

2、用rar打開eclipse中的bin/下面的apk ETA-INF目錄下的CERT.SF和CERT.RSA兩個文件。

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

最近做了一個專案,需要實現終端無人操守自動升級,但發現android2.2中對之前的安裝類都隱藏了。無奈之下去網上找資料,經過不懈的努力終於搞定了。

首先要解決的問題是如何調用已經隱藏的API、解決辦法是:

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()

1 23