Android jni

2016/08/02 ndk、Android jni

Android ndk 开发

1.准备工作

NDK下载

1、官网下载地址需要梯子

2、不需要梯子 这里有许多资源,包括SDK、ADT、反编译工具···

2.配置sudio的ndk路径

或者

接下来可以用c/c++来写hollo word了

如果英文足够好可以看官方的连接

①修改项目下的build.gradle文件

classpath 'com.android.tools.build:gradle:2.1.2'

替换为

classpath 'com.android.tools.build:gradle-experimental:0.7.2'

②修改gradle文件

gradle → wrapper → gradle-wrapper.properties

修改 distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

③修改app下的build.gradle文件

apply plugin: 'com.android.application'

android{
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig{
applicationId "com.xiaoxiaoying.ndktest"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes{
release{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
} } }

apply plugin: 'com.android.model.application'

model{
android{
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig{
applicationId "com.xiaoxiaoying.ndktest"
minSdkVersion.apiLevel 14
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0"
}
buildTypes{
release{
minifyEnabled false
proguardFiles.add(file('proguard-android.txt'))
}
}
ndk{

//指定so名字

moduleName "openssl_lib"

//指定调用的版本号

platformVersion 23

//需要openssl的库来解密某平台的.db文件

//Android ndk里面没有这些文件,需要我们手动导入

//android 使用自带openssl

ldFlags.addAll(["-lcrypto", "-lssl"])
abiFilters.addAll(["armeabi-v7a", "armeabi"]) } } }

④ project → app → com.hudun.tools.jni → WeChatJNI.class

static {
	System.loadLibrary("openssl_lib");
}

public native int decrypt(String pwd,String inFile,String outFile);

decrypt 方法为红色,这里使用Alt + enter出现下图:

点击 Create function java_com_hudun_tools_jni_WeChatJNI_decrypt 生成

这里就可以把 sqlciher-tool>decrypt.c 文件编译使用了。

⑤ debug 调试

  • 点击
  • 选择
  • 这里可能需要一个调试ndk插件,根据提示安装插件即可

  • C/C++ 文件里打断点
  • 选择 debug 运行就可以调试了
  • 详情

    java_com_xiaoxiaoying_tools_jni_WeChatJNI_decrypt