android112 c代码打印日志,c反编译调用java
activity:
package com.itheima.ccalljava; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity {
static{
System.loadLibrary("hello");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click(View v){
helloC();
} public native void helloC(); public void show(String message){
Builder builder = new Builder(this);
builder.setTitle("标题");
builder.setMessage(message);
builder.show();
}
}
hello.c反编译java类调用java
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)//把后面的函数重命名成前面的函数,Android.mk添加LOCAL_LDLIBS += -llog
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) JNIEXPORT void JNICALL Java_com_itheima_ccalljava_MainActivity_helloC
(JNIEnv * env, jobject obj){//obj是MainActivity对象
LOGD("hello!");//打印日志,debug级别的
LOGI("hello!");////打印日志,info级别的
//jclass (*FindClass)(JNIEnv*, const char*);const char*第二个参数是字符串,返回字节码
//C语言用反射调用java代码
jclass clazz = (*env)->FindClass(env, "com/itheima/ccalljava/MainActivity");
//jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);返回方法的id
jmethodID methodID = (*env)->GetMethodID(env, clazz, "show", "(Ljava/lang/String;)V");//(Ljava/lang/String;)V是方法签名,java所有的方法都是有签名的,
//void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
(*env)->CallVoidMethod(env, obj, methodID, (*env)->NewStringUTF(env, "是时候再黑一波小志了"));//调用方法,obj是MainActivity对象,(*env)->NewStringUTF(env, "是时候再黑一波小志了")是把C的字符串转换为java的字符串。
}
android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_LDLIBS += -llog LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := armeabi armeabi-v7a x86 //表示不同的平台
反射:
import java.lang.reflect.Method; public class Demo { public static void main(String[] args) {
try {
//拿到类的字节码。Dialog是类名
Class clazz = Demo.class.getClassLoader().loadClass("Dialog");
//拿到方法,show是方法名,后面是方法的参数类型。
Method method = clazz.getDeclaredMethod("show", String.class);
//调用方法,因为method方法不是静态方法,所有clazz.newInstance()表示对象,后面是参数。
method.invoke(clazz.newInstance(), "好久没黑小志了"); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
android112 c代码打印日志,c反编译调用java的更多相关文章
- 通过反编译看Java String及intern内幕--费元星站长
通过反编译看Java String及intern内幕 一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往 ...
- 【转】代码混淆和apk反编译
代码混淆 http://blog.csdn.net/vipzjyno1/article/details/21042823 apk反编译 http://blog.csdn.net/vipzjyno1/a ...
- Python反编译调用有道翻译(附完整代码)
网易有道翻译是一款非常优秀的产品,他们的神经网络翻译真的挺无敌.无奈有道客户端实在是太难用了,而且在某些具体场景 (比如对网站进行批量翻译) 无法使用,而有道的云服务又特别的贵,一般人是无法 ...
- java混淆工具 字符串加密 程序加密 代码逻辑混淆 防止反编译
混淆工具使用文档 ht-confusion-project1.0.0 目 录 1.功能介绍... 1 2.安装说明... 3 2.1Window查询jdk版本(点击开始菜单,输入cmd, 输入java ...
- exe4j生成的exe反编译成java代码
很早以前写了一个java串口小程序,现在只有exe4j打包后的源程序了,最近又要用,折腾了一下发现其实要找回来也很简单,这里记录一下,以免以后忘记. exe4j只是将java程序,使用自己的方式打包了 ...
- 反编译看java for-each循环
java 1.5发行版引入的for-each循环.(引自<Effective Java>中文版第二版 第46条) 如以下对数组列表的for-each循环示例: public class F ...
- jar包/class文件如何快速反编译成java文件
有时编写的java代码打包为可执行jar包后需要查看工程结构是否是且只有我们需要的包,故需要查看jar包层级. 1.windows系统可以直接在网上下载jd-gui.exe包,然后傻瓜安装: 2.Ma ...
- Android Apk反编译得到Java源代码
大家做Android开发,看到别人应用里一些好的功能,是不是很想得到源码,借鉴一下?既然Android是用JAVA开发的,那么我们就能很容易的通过反编译的到应用的源代码.下面我简单介绍下应该怎么操作. ...
- Android APK反编译得到Java源代码和资源文件
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件. 一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD- ...
随机推荐
- 到底DAO是什么?为什么要有它的存在?
Data Access Object 数据访问接口,就是访问数据库方法的 interface 1. DAO用来封装Data Source的..就比如,Connection conn = DAOFa ...
- Java多态的体现之接口
/** * * @author Administrator * 功能:接口体现多态 */ package com.test4; public class Test { public static vo ...
- VC常用数据类型使用转换
我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]=&qu ...
- 163. Missing Ranges
题目: Given a sorted integer array where the range of elements are [lower, upper] inclusive, return it ...
- Android RelativeLayout
RelativeLayout为相对布局,这种布局内的组件总是相对兄弟组件.父容器来确定的,在定义控件的位置时,需要参照其他控件的位置. 这个程序实现了一个梅花的相对布局 <?xml versio ...
- Pizza pieces
Pizza pieces Description In her trip to Italy, Elizabeth Gilbert made it her duty to eat perfect piz ...
- Eclipse全屏及插件下载
Eclipse全屏插件下载 解压下载的压缩包,将 plugins 文件夹中的 cn.pande.eclipsex.fullscreen_1.0.7.jar 文件拷贝到Eclipse安装目录下的 ...
- hadoop2.2基准测试
<hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...
- 基于.NET平台的分布式应用程序的研究
摘 要:.NET框架是Microsoft用于生成分布式Web应用程序和Web服务的下一代平台.概述了用于生成分布式应用程序的.NET框架的基本原理.重点讲述了.NET框架的基础:公共语言运行时(CLR ...
- 【转】Android 4.4源码下载与编译
原文网址:http://www.cnblogs.com/zhx831/p/3550830.html 这篇文章记录了我下载源码和编译的全过程, 全过程参考Android官方文档 1. 下载Android ...