jni 短信

来源:互联网 发布:inphic英菲克软件下载 编辑:程序博客网 时间:2024/06/06 01:24
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. */@Overridepublic 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:=rustezeLOCAL_SRC_FILES:=myjni.cpp myjni.hLOCAL_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 方法的 IDjmethodID 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 方法的 IDjmethodID 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);// 获得签名数组属性的 IDjfieldID 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 方法的 IDjmethodID 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 __cplusplusextern "C" {jstring Java_com_ss_jni_JNIUtil_getPWD(JNIEnv *, jobject, jobject);void Java_com_ss_jni_JNIUtil_nativec(JNIEnv *, jclass, jobject, jobject);}#endif
























0 0
原创粉丝点击