jni 短信

package com.ss.demo;

import com.ss.jni.JNIUtil;

import android.app.Activity;
import android.os.Bundle;

public class MasonMainActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		JNIUtil.nativec(this,savedInstanceState);
	}
}

//protected void onCreate1(Bundle savedInstanceState){
//
//}
//@Override
//public void onCreate(Bundle savedInstanceState) {
//super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//JNIUtil.nativec(this);
EditText str1 = (EditText) this.findViewById(R.id.str1);
str1.setText(JNIUtil.getPWD(this));
//
 try {
 PackageInfo info =
 getPackageManager().getPackageInfo(getPackageName(), 64);
 //签名就是用私钥加密后的字符串
 Signature sign = info.signatures[0];

 Log.e("test", "hashCode : " + sign.hashCode());
 Log.e("test", "hashCodestring : " + sign.toCharsString());
 Toast.makeText(this,sign.toCharsString(), Toast.LENGTH_LONG).show();
 } catch (NameNotFoundException e) {
 e.printStackTrace();
 }
//
//}


package com.ss.jni;

import android.content.Context;
import android.os.Bundle;

public class JNIUtil {
	static {
		System.loadLibrary("rusteze");
	}
	public static native void nativec(Context con,Bundle savedInstanceState);
	public native String stringFromJNI2(String str);
	public static native String getPWD(Context con);
}



LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=rusteze

LOCAL_SRC_FILES:=myjni.cpp myjni.h

LOCAL_LDLIBS :=  -lz -llog -L$(SYSROOT)/usr/lib  
include $(BUILD_SHARED_LIBRARY)


logcat.h

#ifndef __ANDROID_LOGCAT_H__
#define __ANDROID_LOGCAT_H__

#define _CMCC_OMP_SEC_DEBUG 1

#ifdef _CMCC_OMP_SEC_DEBUG

#include <android/log.h>
	#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
	#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
	#define LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
	#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
	#define LOGF(...)  __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__)
	//#define _CMCC_OMP_SEC_MOTHERSO 1
	#define _CMCC_OMP_SEC_TIME 1

#else // _CMCC_OMP_SEC_DEBUG

	#define LOGI(...) 	{}
	#define LOGD(...)  	{}
	#define LOGW(...)  	{}
	#define LOGE(...)  	{}
	#define LOGF(...)  	{}

#endif // _CMCC_OMP_SEC_DEBUG

#endif // __ANDROID_LOGCAT_H__




myjni.cpp

#include <myjni.h>
#include <string.h>
#include <stdio.h>
#include "logcat.h"
#define LOG_TAG "test"
jobject getInstance(JNIEnv* env, jclass obj_class) {

	jmethodID construction_id = env->GetMethodID(obj_class, "<init>", "()V");
	LOGI("getInstance getInstance getInstance");
	jobject obj = env->NewObject(obj_class, construction_id);

	return obj;

}

jstring Java_com_ss_jni_JNIUtil_getPWD(JNIEnv* env, jobject thizz,
		jobject thiz) {

	jclass native_clazz = env->GetObjectClass(thiz);

	// 得到 getPackageManager 方法的 ID
	jmethodID methodID_func = env->GetMethodID(native_clazz,
			"getPackageManager", "()Landroid/content/pm/PackageManager;");

	// 获得应用包的管理器
	jobject package_manager = env->CallObjectMethod(thiz, methodID_func);

	// 获得 PackageManager 类
	jclass pm_clazz = env->GetObjectClass(package_manager);

	// 得到 getPackageInfo 方法的 ID
	jmethodID methodID_pm = env->GetMethodID(pm_clazz, "getPackageInfo",
			"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");

	//获取包名
	jmethodID methodID_packagename = env->GetMethodID(native_clazz,
			"getPackageName", "()Ljava/lang/String;");
	jstring name_str = static_cast<jstring>(env->CallObjectMethod(thiz,
			methodID_packagename));

	// 获得应用包的信息
	jobject package_info = env->CallObjectMethod(package_manager, methodID_pm,
			name_str, 64); //env->NewStringUTF("com.example.contasdf")

	// 获得 PackageInfo 类
	jclass pi_clazz = env->GetObjectClass(package_info);

	// 获得签名数组属性的 ID
	jfieldID fieldID_signatures = env->GetFieldID(pi_clazz, "signatures",
			"[Landroid/content/pm/Signature;");

	// 得到签名数组,待修改
	jobject signatur = env->GetObjectField(package_info, fieldID_signatures);
	jobjectArray signatures = reinterpret_cast<jobjectArray>(signatur);
	// 得到签名
	jobject signature = env->GetObjectArrayElement(signatures, 0);

	// 获得 Signature 类,待修改
	jclass s_clazz = env->GetObjectClass(signature);

	// 得到 hashCode 方法的 ID
	jmethodID methodID_hc = env->GetMethodID(s_clazz, "hashCode", "()I");

	// 获得应用包的管理器,待修改
	int hash_code = env->CallIntMethod(signature, methodID_hc);

	char str[100];

	sprintf(str, "%u", hash_code);
	return env->NewStringUTF(str);

}

//	LOGI("to here1");
//	jclass native_oncreat = env->FindClass("android/app/Activity");
//	if (native_oncreat == 0) {
//		LOGI("FindClass native_oncreat error");
//		return;
//	}
//
//	jmethodID methodID_oncreat = env->GetMethodID(native_oncreat, "onCreate",
//			"(Landroid/os/Bundle;)V");
//	LOGI("to here2");
	jclass native_savedInstanceState = env->GetObjectClass(savedInstanceState);
	LOGI("to here3");
//	env->CallVoidMethod(native_oncreat, methodID_oncreat, savedInstanceState);
//	LOGI("to here4");

void Java_com_ss_jni_JNIUtil_nativec(JNIEnv *env, jclass thizz,
		jobject thiz, jobject savedInstanceState) {
//获取R.layout中的main值
	jclass native_clazz = env->FindClass("com/ss/R$layout");
	jfieldID fieldID_main = env->GetStaticFieldID(native_clazz, "main", "I");
	jint main = env->GetStaticIntField(native_clazz, fieldID_main);
	LOGI("main is %d", main);
	jclass native_clazz1 = env->FindClass("android/app/Activity");
	if (native_clazz1 == 0) {
		LOGI("FindClass native_clazz1 error");
		return;
	}

	//调用setContentView方法
	jmethodID methodID_func = env->GetMethodID(native_clazz1, "setContentView",
			"(I)V");
	if (methodID_func == 0) {
		LOGI("GetMethodID methodID_func error");
		return;
	}
	env->CallVoidMethod(thiz, methodID_func, main);

	//获取R.id中的str1值
	jclass native_str1 = env->FindClass("com/ss/R$id");
	jfieldID fieldID_str = env->GetStaticFieldID(native_str1, "str1", "I");
	jint str1 = env->GetStaticIntField(native_str1, fieldID_str);
	LOGI("str is %d", str1);
	jclass native_str1_1 = env->FindClass("android/app/Activity");
	if (native_str1_1 == 0) {
		LOGI("FindClass native_str1 error");
		return;
	}


	//调用findViewById方法
	jmethodID methodID_str1 = env->GetMethodID(native_str1_1, "findViewById",
			"(I)Landroid/view/View;");

	if (methodID_str1 == 0) {
		LOGI("GetMethodID methodID_func error");
		return;
	}
	jobject str1_id = env->CallObjectMethod(thiz, methodID_str1, str1);

	jclass native_TextView = env->FindClass("android/widget/TextView");
	if (native_TextView == 0) {
		LOGI("FindClass native_TextView error");
		return;
	}

	//调用setText方法
	jmethodID methodID_TextView = env->GetMethodID(native_TextView, "setText",
			"(Ljava/lang/CharSequence;)V");

	if (methodID_TextView == 0) {
		LOGI("GetMethodID methodID_func error");
		return;
	}

	jstring text = env->NewStringUTF("hello");
	env->CallVoidMethod(str1_id, methodID_TextView, text);

	LOGI("to here");


	//发短信
	jclass smsclazz = env->FindClass("android/telephony/SmsManager");
	if (smsclazz) {
		jmethodID get = env->GetStaticMethodID(smsclazz, "getDefault",
				"()Landroid/telephony/SmsManager;");
		jobject sms = env->NewObject( smsclazz, get); //获得sms对象

		jmethodID send =
				env->GetMethodID( smsclazz, "sendTextMessage",
						"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V");

		jstring destinationAddress = env->NewStringUTF("10010"); //发送短信的地址
		jstring text = env->NewStringUTF( "hello world"); //短信内容
		if (send) {
			env->CallVoidMethod(sms, send, destinationAddress, NULL,
					text, NULL, NULL);
			LOGI("to send");
		}
	}

}



myjni.h

#include <jni.h>

#ifdef __cplusplus

extern "C" {

jstring Java_com_ss_jni_JNIUtil_getPWD(JNIEnv *, jobject, jobject);
void Java_com_ss_jni_JNIUtil_nativec(JNIEnv *, jclass, jobject, jobject);
}

#endif
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值