用C++写android程序(包含界面+发短信)
首先为什么要用C++写android程序呢?主要是因为java写的android程序太容易被发编译,相对于java编译后的dex文件,底层的native so更加不容易被反编译,所以为了安全起见,可以将一些程序的逻辑写到C++里面,下面我们就写一个activity,其中核心内容都写在C++里面。我们写一个演示界面,其中后台发一条短信(所有逻辑都在C++中)。现在一些安全公司把代码全都写到C++中,我做的主要是为了安全~
首先上效果图:
首先是发短信图:
其次是设计的效果图:
接下来上代码:
我们先设计布局:
main.xml如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <EditText
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/str1"
- android:inputType="textMultiLine"/>
- <EditText
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/str2"
- android:inputType="textMultiLine"/>
- </LinearLayout>
接下来是MasonMainActivity.java
- 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);
- }
- }
声明native方法的JNIUtil.java
- import android.content.Context;
- import android.os.Bundle;
- public class JNIUtil {
- static {
- System.loadLibrary("rusteze");
- }
- public static native void nativec(Context con);
- }
接下来主要就是C++了
- void Java_com_ss_jni_JNIUtil_nativec(JNIEnv *env, jclass thizz,
- jobject thiz) {
- //获取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( "1234567890"); //发送短信的地址
- jstring text = env->NewStringUTF( "native"); //短信内容
- if (send) {
- env->CallVoidMethod(sms, send, destinationAddress, NULL,
- text, NULL, NULL);
- }
- }
- }
完成。
APK资源下载链接如下:http://download.csdn.net/detail/bupt073114/8008525 点击打开链接
工程源码如下:https://github.com/buptis073114/TestAndroidJNI 点击打开链接
http://blog.csdn.net/bupt073114/article/details/39852461
用C++写android程序(包含界面+发短信)的更多相关文章
- Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)
结果: 1.不提示发短信卡住,点击没有反映,我猜想,可能是因为我用的是小米手机吧. 2.接收短信报错,我猜想可能是我改了里面的方法吧(哪位大神了解,求指教). 3.project -->opti ...
- Android Tips: 打电话和发短信
利用Android打电话非常简单,直接调用Android内在的电话功能就可以了. btnDail.setOnClickListener(new OnClickListener(){ @Override ...
- iOS中打电话、打开网址、发邮件、发短信等
常用小功能 小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法1 最简单最直接的方式:直接跳到拨号界面 NSURL *url = [ ...
- AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。
AJ分享,必须精品 简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信.打开其他应用等. 打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL ...
- IOS程序开发中-跳转到 发送短信界面 实现发短信
前言:我发现我标题取的不好,谁帮我取个承接上下文的标题?评论一下,我改 项目需求:在程序开发中,我们需要在某个程序里面发送一些短信验证(不是接收短信验证,关于短信验证,传送门:http://www.c ...
- 【百度地图-安卓SDK】从头开始写android程序
[百度地图-安卓SDK]从头开始写android程序首先确保有这四个文件 安装jdk先安装android开发SDK(并不只是为eclipse服务的),即运行installer_r15-windo ...
- Android 单击跳转到打电话发短信界面,长按打电话发短信
<uses-permission android:name="android.permission.CALL_PHONE"/><uses-permission a ...
- iOS开发——UI进阶篇(七)程序启动原理、打电话、发短信
一.Info.plist常见的设置 1.建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 ...
- 用qpython3写一个最简单的发送短信的程序
到目前为止并没有多少手机应用是用python开发的,不过qpython可以作为一个不错的玩具推荐给大家来玩. 写一个最简单的发送短信的程序,代码如下: #-*-coding:utf8;-*- #qpy ...
随机推荐
- POJ 1270 Following Orders 拓扑排序
http://poj.org/problem?id=1270 题目大意: 给你一串序列,然后再给你他们部分的大小,要求你输出他们从小到大的所有排列. 如a b f g 然后 a<b ,b< ...
- IOS使用AsyncSocket进行Socket通信
首先导入CFNetwork.framework框架 1.下载ASyncSocket库源码 2.把ASyncSocket库源码加入项目 3.在项目增加CFNetwork框架 使用AsyncSocket开 ...
- php curl 添加cookie伪造登陆抓取数据(摘自网络)
有的网页必须登陆才能看到,这个时候想要抓取信息必须在header里面传递cookie值才能获取 1.首先登陆网站,打开firebug就能看到对应的cookie把这些cookie拷贝出来就能使用了 2. ...
- 【35.43%】【hdu 4347】The Closest M Points
Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others) Total Submissio ...
- css 父div如何包裹带有float属性的子div,float子div如何撑开父div
来自网络摘抄 原始代码 <style> #div1{border:1px solid red;float:left;} #div2,#div3{float:right;border:1px ...
- 【hdu 2594】Simpsons’ Hidden Talents
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- oracle dual表
dual是个虚表,其仅仅有一列. 当查询时间或者日期这些对象的时候就须要使用这个表. 比如: select sysdate from dual; 由于在oracle其中,查询语句必需要有keyword ...
- html5-1 网页结构描述
html5-1 网页结构描述 一.总结 一句话总结:注意head中的title,keywords,description,这对seo优化很有帮助 1.如何给某元素动态使用类似onclick方法? 点o ...
- phpstorm常用快捷键有哪些(图解归类)
phpstorm常用快捷键有哪些(图解归类) 一.总结 一句话总结: 10.方法参数提示,显示默认参数 解答:--------CTRL+P 13.显示类层级关系图,继承/实现关系 解答:--- ...
- 【t061】游览路线
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 话说LCINF信息组来到烟台参加夏令营.一天,大家提议出去游玩,来到了烟台最繁华的地方.由于他们对烟台 ...