您的位置:首页 > 编程语言 > Java开发

android使用andFix增量更新,在ubuntu系统下,Eclipse版本

2016-03-24 17:28 537 查看

AndFix增量更新Eclipse版本

    前言:AndFix是android不发版也能修改bug的框架,但是需要在你发版之前先集成。
 先得依赖AndFix Library项目

 然后开始集成
  public class MyApplication extends Application {

  //这个是补丁的名称

     public static final String APTCH_PATh = "/out.apatch";

     public PatchManager mPatchManager;

      @Override

     public void onCreate() {

         super.onCreate();

         try {

             // 初始化patchManager的版本

             mPatchManager = new PatchManager(this);

             // 初始化patchManager的版本

             String appversion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

             mPatchManager.init(appversion);

             // 加载已经添加到patchManager中的patch

             mPatchManager.loadPatch();

             String aptchPath = Environment.getExternalStorageDirectory().getAbsolutePath() + APTCH_PATh;

             // 加入补丁存储路径

             mPatchManager.addPatch(aptchPath);

         } catch (Exception e1) {

             e1.printStackTrace();

         }

      }

  }
    然后在你的androidManifest.xml中声明权限
  <uses-permission android:name="android.permission.INTERNET"/>

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
   最后执行命令,生成一个.apatch文件,这就是一个补丁文件,
   windows下执行命令 

apkpatch.bat -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android

-f <new.apk> :新版本

-t <old.apk> : 旧版本

-o <output> : 输出目录

-k <keystore>: 打包所用的keystore

-p <password>: keystore的密码

-a <alias>: keystore 用户别名

-e <alias password>: keystore 用户别名密码
ubuntu下执行命令
./apkpatch.sh -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android

最后说一个注意事项:1 有人可能会认为我们手动把存储路径下的.apatch文件删除会不会有影响,答案是不会有影响,因为加载一次之后它会load到项目的根目录下,你删除也无所谓。
2  这个折腾我好久,就是第一次的补丁有效果,第二次再加载补丁就不行了,最后解决办法是修改源码
public void addPatch(String path) throws IOException {

        File src = new File(path);

        File dest = new File(mPatchDir, src.getName());

        if (!src.exists()) {

            throw new FileNotFoundException(path);

        }

        if (dest.exists()) {

            Log.d(TAG, "patch [" + path + "] has be loaded.");

            boolean deleteFile = FileUtil.deleteFile(dest);

            if(!deleteFile){

                return;

            }

        }

        FileUtil.copyFile(src, dest);// copy to patch's directory

        Patch patch = addPatch(dest);

        if (patch != null) {

            loadPatch(patch);

        }

    }

附上一个写的很好的博客地址:http://www.jianshu.com/p/479b8c7ec3e3

          

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AndFix Eclipse ubunt