用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 ...
随机推荐
- 算法 Tricks(三)—— 判断序列是否为等差数列
判断一个数列不是等差数列,要比判断一个数列是等差数列比较容易. bool progressive = true; for (int i = 0; i < A.size() - 1; ++i){ ...
- [Yarn] Use Yarn to Create an Alternative Import Name of an Installed Library
In this lesson we'll show how to use yarn to alias the names of same npm libraries but install diffe ...
- swift学习第十四天:属性监听器
监听属性的改变 在OC中我们可以重写set方法来监听属性的改变 Swift中可以通过属性观察者来监听和响应属性值的变化 通常是监听存储属性和类属性的改变.(对于计算属性,我们不需要定义属性观察者,因为 ...
- 一段代码的疑问(1)——unsigned与signed
现象: 先来看一段代码: 这段代码的输出结果是: -84 4294967264 分析: xiaoqiang@dev:~/cpp$ g++ -g c212.cc -o temp xiaoqiang@de ...
- 结构体什么时候用.什么时候用->
- Java 字符转Unicode
static String unicode2String(String unicodeStr) { StringBuffer sb = new StringBuffer(); String str[] ...
- AngularJS之ng-options指令
1.基本下拉效果(lable for value in array) 其中select标签中的ng-model属性必须有,其值为选中的对象或属性值. <div ng-controller=&qu ...
- iOS开发之Quartz2D 五:UIKIT 绘图演练,画文字,画图片
#import "DrawView.h" @implementation DrawView -(void)awakeFromNib { // //画图片 // UIImage *i ...
- [GraphQL] Use GraphQLList with GraphQLObject Types
When working with collections of things in GraphQL, we'll always reach out for the GraphQLListType. ...
- 三列自适应布局的实现方式(兼容IE6+)
1.绝对定位方式 <div class="nm-3-lr"> <div class="aside-f"> <p>侧边栏1固定 ...