当前位置:  编程技术>移动开发
本页文章导读:
    ▪phonegap入门-一 搭建phonegap开发环境(Androi平台)        phonegap入门--1 搭建phonegap开发环境(Androi平台)最近一直在学习jquerymobile,但是只是学了jquerymobile却没什么大用处,所以从今天开始学下phonegap。 phonegap的介绍就不说了,现在的版本已经到2.4了.........
    ▪ Gerrit复核服务器搭建简易教程(Ubuntu 12.10)        Gerrit审核服务器搭建简易教程(Ubuntu 12.10)本文将详细记录如何在一个全新的Ubuntu系统中安装及配置Gerrit服务器的相关详细步骤。 1.安装Ubuntu12.xx(本人使用的是12.10,其他版本未测试) 2.配.........
    ▪ window上利用JNI在本地代码访问java代码       window下利用JNI在本地代码访问java代码这一篇讨论在c/c++代码里生成java对象,访问修改其字段、调用其方法。编译和运行流程参见上一篇。 这里写两个java类:JniFuncMain和JniTest。 1.在JniFuncMain是.........

[1]phonegap入门-一 搭建phonegap开发环境(Androi平台)
    来源: 互联网  发布时间: 2014-02-18
phonegap入门--1 搭建phonegap开发环境(Androi平台)

最近一直在学习jquerymobile,但是只是学了jquerymobile却没什么大用处,所以从今天开始学下phonegap。

phonegap的介绍就不说了,现在的版本已经到2.4了,我使用最新的2.4搭建的环境,步骤如下:

1 安装eclipse,具体自己上网搜

2 下载android-sdk,安装adt,这个也自己去网上搜。

3 下载phonegap2.4,并解压。

4 新建一个android项目,我建的项目是基于android4.0的,基本上就一路next就可以了。

5 找到此目录:phonegap-2.4.0\lib\android\example。将源项目中的assets、res、src目录中的东西删除,然后再讲phonegap给的这个例子中的东西拷到对应的目录下。将libs目录下的文件也要拷贝到工程libs下。使用phonegap给的项目中的AndroidManifest.xml替换工程中的AndroidManifest.xml。此时这个功能就搭建好了。

新建一个模拟器,然后在项目上右键--->run as--->android application。当模拟器中出现devices is ready的时候说明配置好了。


我也是刚开始接触到phonegap,所以许多东西都还不熟。既然使用了phonegap就是为了使用javascript和html开发,所有的这些代码都放在assets/wwww目录下,所以只要配置好了环境基本只要修改这个目录下的东西就可以了。至少我目前是这样理解。


    
[2] Gerrit复核服务器搭建简易教程(Ubuntu 12.10)
    来源: 互联网  发布时间: 2014-02-18
Gerrit审核服务器搭建简易教程(Ubuntu 12.10)

本文将详细记录如何在一个全新的Ubuntu系统中安装及配置Gerrit服务器的相关详细步骤。


1.安装Ubuntu12.xx(本人使用的是12.10,其他版本未测试)


2.配置java环境

下载jdk-6u34-linux-x64.bin(百度google),终端中执行安装(如没有权限,则执行 chmod a+x jdk-6u34-linux-x64.bin)

$: ./jdk-6u34-linux-x64.bin

安装会自动执行。安装完后,配置相关环境变量

$: vim ~/.bashrc

添加如下环境变量:(username为您的用户名)

JAVA_HOME=/home/username/jdk1.6.0_34

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

$: source ~/.bashrc

验证是否配置成功:

$: java -version

$: javac

如果以上终端命令没有返回错误,且有正常的版本信息及help信息,则证明JAVA环境配置成功,可以继续。如有错误,请自行百度google。


3.配置Gerrit.xxx.war

打开终端,到达gerrit.xxx.war所在目录,执行:

$: java -jar gerrit.xxx.war init -d review_site


Create '/home/username/review_site' [Y/n]?

...

基本就是一路回车下去,默认的配置就好,需要说的一点就是验证方式OPENID,OPENID可以采用google及yahoo邮箱登录,但是某些时候由于GFW的原因,这些可能不好用,所以就可以选择http(推荐)。 管理的数据库类型也因人而异,喜欢什么就用什么,默认为H2.


配置完成后,会自动调用gerrit.sh脚本开始gerrit服务,且会自动打开浏览器,这个时候一定是失败的,因为还没有配置apache2.

在配置apache2之前需要对gerrit的配置文件进行小小的修改,该文件为review_site/etc/gerrit.config

    将字段[gerrit]下的canonicalWebUrl改为https://127.0.0.1:8081/

    将字段[httpd]下的listenUrl改为 proxy-https://127.0.0.1:8081/

保存即可。


4.配置apache2

终端执行:

$: sudo apt-get install apache2

会进行安装,少许等待即可。另,本人用的是163的镜像软件源,感觉速度还是很不错的。

apache2在ubuntu上安装完后是没有httpd.conf这个配置文件的,去/etc/apache2/下看一看究竟

创建httpd.conf文件(当然,需要root权限的),录入以下内容:

<VirtualHost *>
        ServerName localhost

        ProxyRequests Off
        ProxyVia Off
        ProxyPreserveHost On

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

        <Location /login/>
                AuthType Basic
                AuthName "Gerrit Code Review"
                AuthBasicProvider file
                AuthUserFile /home/username/review_site/etc/passwords
                Require valid-user
        </Location>

        ProxyPass / http://127.0.0.1:8081/

</VirtualHost>

这个配置文件的意思是,当访问任意(*)时,进行代理,代理到/login/目录,并根据AuthUserFile请求用户名及密码,最终代理为http://127.0.0.1:8081/

这里有两个重点需要说一下:

a.关于review_site/etc/passwords

打开终端,进入review_site/etc目录下,执行:

$: touch passwords

$: htpasswd passwords gerrit

会请求你输入此用户(gerrit)的密码,确认无误后将相关信息写入passwords文件中。这个用户名及密码就是你稍后访问本地搭建的gerrit服务器所需要的。

b.ProxyPass / http://127.0.0.1:8081/

自此应与gerrit.config中字段[httpd]的配置对应相同,必须。


配置完后,保存该文件。

别高兴的太早,还没有完,现在这个配置文件只是写玩了而已,并没有生效。打开apache2.conf一看究竟吧。

你会发现apache2.conf这个文件通过Include来引用其他配置文件,但是并没有httpd.conf,仿照其他Include将httpd.conf也引用进去。

Include httpd.conf

保存,退出。


no,还没有完。

如果现在就着急重启apache2服务的话会发现出现proxy相关错误。是因为apache2的proxy模块还没有开启,通过查看apache2.conf也能够发现,mods-enable文件夹下的被引用了,但是在这里并没有发现proxy相关模块,在mods-available中却有。通过ls -l发现enable下边的功能都是link过来的,ok,也link过来吧。

通过ln -s 命令将proxy.conf proxy.load proxy_http.load从available中link到enable中即可。


大功告成,执行:

$: sudo /etc/init.d/apache2 restart

重启apache2服务。

现在打开服务器,登录127.0.0.1出现gerrit界面。


OVER.


PS:容易出现的错误

1.未修改apache2.conf引用,导致httpd.conf未生效

2.httpd.conf中VirtualHost字段后将*写成与127.0.0.1:8081相同,这里的意思是输入,后边的才是代理“到”的端口。




    
[3] window上利用JNI在本地代码访问java代码
    来源: 互联网  发布时间: 2014-02-18
window下利用JNI在本地代码访问java代码

这一篇讨论在c/c++代码里生成java对象,访问修改其字段、调用其方法。编译和运行流程参见上一篇。

这里写两个java类:JniFuncMain和JniTest。

1.在JniFuncMain是主类。里面有一个静态整形字段。

2.仍然按照常规流程用static block加载dll库。

3.而且还声明了一个本地方法--注意static属性。返回一个JniTest对象。对象的构造过程在createJniObject()的本地函数调用java构造方法执行。

public class JniFuncMain
{
    private static int staticIntField = 200;
    
    // 加载本地库jnifunc.dll
    static{ System.loadLibrary("jnifunc");}

    public static native JniTest createJniObject();

    public static void main(String[] args)
    {
        System.out.println("[java]: createJniObject() call native method!");
        JniTest jniObj = createJniObject();
        jniObj.callTest();
    }
}


class JniTest
{
    private int intField;
    
    // 构造方法
    public JniTest( int num )
    {
        intField = num;
        System.out.println("[java]:JniTest' constructor been called! init intField =" + num);
    }

    // 此方法由本地代码调用
    public int callByNative(int num)
    {
        System.out.println("[java]: i be called by native code! set intField = " + num);
        return num;
    }


    public void callTest()
    {
        System.out.println("i be called by java code!");
        return;
    }
}


本地c++代码实现createJniObject函数:

#include "JniFuncMain.h" // 注意用javah命令生成
#include <stdio.h>

JNIEXPORT jobject JNICALL Java_JniFuncMain_createJniObject(JNIEnv *env, jclass clazz)
{

	jclass targetClass;
	jmethodID mid;
	jobject newObject;
	jstring helloStr;
	jfieldID fid;
	jint	staticIntField;
	jint	result;
	
	// 获得JniFuncMain类的staticIntField变量值
	fid = env->GetStaticFieldID(clazz, "staticIntField", "I");
	staticIntField = env->GetStaticIntField(clazz, fid);
	printf("[cpp]get JniFuncMain private field staticIntField value\n");
	printf("	JniFuncMain.staticIntField = %d\n", staticIntField);
	
	// 查找要访问的成员所在的类
	targetClass = env->FindClass("JniTest");
	
	// 查找构造方法
	mid = env->GetMethodID(targetClass, "<init>", "(I)V"); 
	// 1."(I)V"是用javap反编译工具反编译JniTest的成员
	//  获得的签名。GetMethodID方法会根据此签名找到该方法。 
	//  反编译class文件命令,例子: javap -s -p 类名
	// 2. 第一个参数不是JNIEnv*类型是因为此代码是c++代码。原理类似于this指针。
	// 3. 只有获得构造方法时第2个参数是<init>,其他的,直接传入方法名称即可。
	
	// 生成JniTest对象
	printf("[cpp]JniTest object generate...\n");
	newObject = env->NewObject(targetClass, mid, 100);
	
	// 调用jniTest对象的方法返回一个值,本地打印出来
	mid = env->GetMethodID(targetClass, "callByNative", "(I)I");
	result = env->CallIntMethod(newObject, mid, 200);
	
	// 再调用一下jni设置字段的方法
	fid = env->GetFieldID(targetClass, "intField", "I");
	printf("[cpp]:set JniTest object field intField = 200\n");
	env->SetIntField(newObject, fid, 200);

	return newObject;

}


结果如下:



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3