用android studio 生成增量更新的.so文件

一.生成.h文件

1.在android项目中新建jni的工具类

package com.appmartket.patch;

public class JniClient {
    static {
        System.loadLibrary("Patch");
    }
    public native static int patch(String oldApkPath, String newApkPath, String patchPath);
}

2.在android studio中点击 Build -> Make Project,生成JniClient.java文件的class文件,class文件在app_path/build/intermediates/classes/debug目录下

3.cmd 切换到 <Project>\app\src\main的目录下

4.执行生成.h文件的命令

javah -d jni -classpath <SDK_android.jar>;..\..\build\intermediates\classes\debug com\xfappmarket\patch\JniClient

5.执行之后会在..\src\main目录下出现一个新目录jni,该目录下有com_xfappmarket_patch_JniClient.h文件


二.生成.c文件

1.新建com_xfappmarket_patch_JniClient.c文件 2.文件内容如下

#include "bspatch.h"
#include "com_xfappmarket_patch_JniClient.h"
#include <jni.h>
#include <stdlib.h>
#include <android/log.h>
JNIEXPORT jint JNICALL Java_com_xfappmarket_patch_JniClient_patch(JNIEnv* env,
      jobject othis, jstring argv1, jstring argv2, jstring argv3) {
   char ** argv;
   int loopVar,result;
   argv = (char**) malloc(4 * sizeof(char*));
   for (loopVar = 0; loopVar < 4; loopVar++) {
      argv[loopVar] = (char*) malloc(100 * sizeof(char));
   }
   argv[0] = "bspatch";
   argv[1] = (*env)->GetStringUTFChars(env, argv1, 0);
   argv[2] = (*env)->GetStringUTFChars(env, argv2, 0);
   argv[3] = (*env)->GetStringUTFChars(env, argv3, 0);
   result=bspatch(argv);
   (*env)->ReleaseStringUTFChars(env, argv1, argv[1]);
   (*env)->ReleaseStringUTFChars(env, argv2, argv[2]);
   (*env)->ReleaseStringUTFChars(env, argv3, argv[3]);
   return result;
}

三.导入文件

向src/main/jni文件夹下导入bzip2相关的文件和Android.mk文件,Android.mk文件内容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
#bzlib模块
bzlib_files := \
   blocksort.c \
   huffman.c \
   crctable.c \
   randtable.c \
   compress.c \
   decompress.c \
   bzlib.c

LOCAL_MODULE := libbz
LOCAL_SRC_FILES := $(bzlib_files)
include $(BUILD_STATIC_LIBRARY)

#bspath模块
include $(CLEAR_VARS)
LOCAL_MODULE    := bspatch
LOCAL_SRC_FILES := bspatch.c
LOCAL_C_INCLUDES := bspatch.h
LOCAL_STATIC_LIBRARIES := libbz #引入libbz库

include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := Patch 				--------------------------》System.loadLibrary("Patch");
LOCAL_SRC_FILES := com_xfappmarket_patch_JniClient.c
LOCAL_STATIC_LIBRARIES := bspatch
LOCAL_LDLIBS :=  -llog#加入log

include $(BUILD_SHARED_LIBRARY)

四.生成.so文件

在src/main/jni文件夹下,使用命令行ndk-build,ndk会自动在src/main下生成libs和obj目录,需要用到的patch库文件就是 libs/armeabi/libPatch.so。(如果生成.so文件后运行时报错说找不到bspatch,则需要clean syc工程,然后可以正常使用)

参考:http://blog.youkuaiyun.com/duguang77/article/details/17676797

	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值